【问题标题】:asp.mvc3 @Html.DropDownListFor<> not working correctlyasp.mvc3 @Html.DropDownListFor<> 无法正常工作
【发布时间】:2011-10-27 13:01:24
【问题描述】:

我对 ASP.MVC3 中的下拉列表有一个奇怪的问题。 我有一个看起来像这样的视图模型:

public class dto{
  [Key]
  public Int32 ClientID { get; set; }
  [Required, MaxLength(50)]
  public Name{get;set;}

  public int ClientTypeID { get; set; }

  public SelectList ClientTypes { get; set; }
}

剃须刀使用:

<div class="editor-label">
    @Html.LabelFor(model => model.ClientTypeID)
</div>
<div class="editor-field">
    @Html.DropDownListFor(x => x.ClientTypeID,Model.ClientTypes)
</div>

在控制器中,我用数据填充 ClientTypes。 当我使用它创建一个新的 dto 对象时,它工作正常,并且选择被传输回控制器并保存。 当我使用它来编辑现有对象时,它也可以正常工作,在页面打开时选择正确的值。

问题是,当我更改选择时,它不会被发送回控制器,而其他编辑的值会正确返回。

谁能指出问题的方向?

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 postback viewmodel html-helper


    【解决方案1】:

    所以,在我的代码中我做了这样的事情 - 在 ViewModel 中我有一个 IEnumerable:

    public IEnumerable<Choice> Choices { get; set; }
    

    在控制器操作中重新填充。

    Choice 看起来像

    public class Choice
    {
       public int Id { get; set; }
       public string Text { get; set; }
    }
    

    在我的 ViewModel 中,我还有一个看起来像这样的成员:

    public int TheChoice { get; set; }
    

    然后在我的视图中,我得到了如下所示的内容:

    @Html.DropDownListFor(model => model.TheChoice, new SelectList(Model.Choices, "Id", "Text", @Model.TheChoice))
    

    这似乎工作得很好。

    你在做不同的事情吗?

    【讨论】:

    • 我似乎错过了最后一个 @Model.TheChoice 部分。但是添加当量并没有改变事情。除了将更新后的值发送回控制器之外,它仍然适用于所有场景。
    • 澄清一下,如果您在控制器操作中放置断点并检查从视图返回的 viewmodel 参数,您会看到 viewmodel 参数中的 ClientID 值具有 old i> 价值,而不是 价值,对吧?
    • 不是 cliendID,而是 ClientTypeID,但是是的,这是正确的。我可以看到来自 VM 的所有值,并且文本字段已更新,只是 ClientTypeID 没有。它仍然是旧值。我得出的结论是,这意味着它可以正确发送到那里,然后再返回,只是没有在那里更新。我不知道为什么。
    • 奇怪。想知道您的模型是否存在映射问题。如果您将操作上的签名更改为类似于public ActionResult Edit(FormCollection collection),然后注释掉代码主体并只执行return View();,则在其上放置一个断点并检查 FormCollection 参数,您是否看到那里的新值在调试器还是旧的?在监视窗口中,可以在 collection->base->base->_entriesArray 下找到这些值。
    • 您不会碰巧在您的视图中有@HiddenFor(model =&gt; model.ClientTypeID) 吗?这会导致 viewmodel 属性无法更新。
    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 2016-09-01
    • 2012-07-11
    • 2018-04-08
    • 2017-04-20
    • 2018-10-02
    • 2016-09-04
    • 2010-10-06
    相关资源
    最近更新 更多