最近很多小伙伴都在问php–Doctrineselectwithnull这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展asp.net-mvc-3–在Post上,下拉列表Selec
最近很多小伙伴都在问php – Doctrine select with null这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null、c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件、Doctrine CLI输出doctrine.php的内容、doctrine-orm – Doctrine 2:写一个合适的Subselect等相关知识,下面开始了哦!
本文目录一览:- php – Doctrine select with null
- asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null
- c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件
- Doctrine CLI输出doctrine.php的内容
- doctrine-orm – Doctrine 2:写一个合适的Subselect
php – Doctrine select with null
$builder = $this->getEntityManager()->createqueryBuilder(); $builder->select( 'f.id',... 'NULL AS missing_attribute' ) ->from(...,'f') ...;
并避免:
Doctrine\ORM\Query\QueryException: ... got 'NULL'
解决方法
查询构建器用于生成DQL(域查询语言),并且此空字段不是域的一部分.
或者只选择它而不使用NULL字段并运行结果并手动添加它.
asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null
public class testCreateModel { public string s1 { get; set; } public SelectList DL { get; set; } public testCreateModel() { Dictionary<string,string> items = new Dictionary<string,string>(); items.Add("1","Item 1"); items.Add("2","Item 2"); DL = new SelectList(items,"Key","Value"); } }
我的启动行动是:
public ActionResult testCreate() { testCreateModel model = new testCreateModel(); return View(model); }
我的剃刀视图(删除了相关部分)是:
@model Tasks.Models.testCreateModel @using (Html.BeginForm()) { <fieldset> <legend>testCreateModel</legend> <div> @Html.LabelFor(model => model.s1) </div> <div> @Html.EditorFor(model => model.s1) </div> <div> Select an item: </div> <div> @Html.DropDownList("dropdownlist",(SelectList)Model.DL) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> }
回发行动是:
public ActionResult testCreate(testCreateModel model,FormCollection collection) { if (ModelState.IsValid) { Console.WriteLine("SelectedValue: ",model.DL.SelectedValue); Console.WriteLine("FormCollection:",collection["dropdownlist"]); // update database here... } return View(model); }
在回发后,model.DL.SelectedValue为null. (但是,可以从FormCollection中获取所选项目,但这不是重点). DL对象仍然正确填充,否则,立即窗口输出如下:
model.DL {System.Web.Mvc.SelectList} base {System.Web.Mvc.MultiSelectList}: {System.Web.Mvc.SelectList} SelectedValue: null model.DL.Items Count = 2 [0]: {[1,Item 1]} [1]: {[2,Item 2]} model.DL.SelectedValue null
Q1:如何使用SelectedValue属性?
现在,如果在Razor视图中我将Html SELECT标记的名称更改为DL(即与模型中的属性名称相同):
@Html.DropDownList("DL",(SelectList)Model.DL)
我得到一个例外:
No parameterless constructor defined for this object. Stack Trace: [MissingMethodException: No parameterless constructor defined for this object.] System.RuntimeTypeHandle.CreateInstance(RuntimeType type,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck) +0 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache) +98 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean fillCache) +241 System.Activator.CreateInstance(Type type,Boolean nonPublic) +69 System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Type modelType) +199 System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext,ValueProviderResult ...
Q2:为什么?
谢谢.
解决方法
作为一个好建议,尝试通过ViewBag设置SelectLists,这有助于保持viewmodel不受需要填充表单的数据的影响.
所以你的例子可以像这样解决:
public class testCreateModel { public string s1 { get; set; } public int SelectedValue { get; set; } }
并在您的视图中执行此操作:
@Html.DropDownList("SelectedValue",(SelectList)ViewBag.DL)
在您的GET操作中填充ViewBag.DL之前.
至于你的Q2,默认的ModelBinder要求所有要绑定的类型都有一个默认的构造函数(以便ModelBinder可以创建它们)
c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件
我在MultiSelector上看到有Begin / EndUpdateSelectedItems方法以及IsUpdatingSelectedItems属性.不幸的是,我对这个系列/活动的消费者并不知道它的来源.
有没有办法使DataGrid / SelectedItems集合仅在更新完成后发送CollectionChanged通知?
非常感谢你.
编辑:
我发现,对于DataGrid,即使更改大型选择,也不会设置IsUpdatingSelectedItems属性.
编辑:
我发现DataGrid SelectionChanged事件在完全更改后只被正确触发一次.这很不幸,因为这会破坏简单数据绑定的可能性,但如果您可以控制SelectedItems集合的使用者,那么这是一种潜在的解决方法.
解决方法
Doctrine CLI输出doctrine.php的内容
#!/usr/bin/env sh SRC_DIR="`pwd`" cd "`dirname "$0"`" cd "../doctrine/orm/bin" BIN_TARGET="`pwd`/doctrine.PHP" cd "$SRC_DIR" "$BIN_TARGET" "$@"
这是doctrine.PHP的内容,我用代码frome教程替换了.
转到项目的根目录,然后键入:
PHP path_to_doctrine_bin/doctrine.PHP [options]
应该这样做.
doctrine-orm – Doctrine 2:写一个合适的Subselect
$qb = $this->entityManager->createqueryBuilder() ->select('w,se') ->from('Dashboard\Entity\Section','se') ->innerJoin('se.word','w') ->innerJoin('se.location','l'); $qb->add('where',$qb->expr()->andx( $qb->expr()->eq('l.ignored',$ignored),$qb->expr()->eq('l.id',$params['l_id']) ),true);
这条线以上的一切都很好
$totalQb = $this->entityManager->createqueryBuilder() ->select('COUNT(x.id)') ->from('Dashboard\Entity\Section','x');
上面的$totalQb本身运行良好.但是当我这样做的时候
以下,并尝试使用$qb作为$totalQb的子选择…
$dql = $qb->getDql(); $totalQb->add('where',$totalQb->expr()->exists( $dql )); $totalsql = $totalQb->getQuery(); $sql = $totalsql->getsql(); $total = $totalsql->getSingleScalarResult();
这是错误的
它指的是SubSelect’exists’语句.但是当我自己运行$dql时
它返回预期的结果
[Syntax Error] line 0,col 69: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM,got ','
在我的场景中进行子选择的正确方法是什么?
UPDATE
有人建议我添加$totalsql-> getDQL();这是该声明的输出:
SELECT COUNT(x.id) FROM Dashboard\Entity\Section x WHERE EXISTS( SELECT w,se FROM Dashboard\Entity\Section se INNER JOIN se.word w INNER JOIN se.location l AND (l.ignored = 0) AND (l.id = 2) GROUP BY w.id,l.id )
解决方法
关于php – Doctrine select with null的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null、c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件、Doctrine CLI输出doctrine.php的内容、doctrine-orm – Doctrine 2:写一个合适的Subselect等相关内容,可以在本站寻找。
本文标签: