0

我有一个在网格中使用的 ViewModel。让我们将其命名为 DivisionVm

public class DivisionVm {

      public int DivisionId
      public string Name
      public DateTime StartDate  { get; set; }
      public string Condition
      ....    
}

当我想更新模型时,我使用自定义编辑器模板。因为 Condition 需要一些预定义的字符串值,所以我在模板中使用下拉列表。

       @(Html.Kendo().DropDownListFor(model=>model.Condition)

      .DataTextField("Text")
      .DataValueField("Condition")
      .Events(e => e.Change("change"))
      .BindTo(new List<ConditionVm>() {
          new ConditionVm() {
              Text = "Red",
              Condition = "Red"
          },
          new ConditionVm() {
              Text = "Green",
              Condition = "Green"
          },
          new ConditionVm() {
              Text = "Green",
              Condition = "Green"
          }
      })

)

ConditionVm 只是我用于绑定的视图模型

public class ConditionVm
{
    public string Text { get; set; }
    public string Condition { get; set; }
}

我的问题是,当弹出编辑器打开时,它会在下拉列表中显示当前条件值。但是,如果我从列表中选择另一个值,kendo 不会跟踪更改。因此,如果我按下更新按钮 viemodel 不会更新。如果我更改其他字段(例如名称),则 viemodel 正在更新,但仅适用于这些字段。条件仍然存在即使我从下拉列表中选择了另一个值也是如此。

我的控制器更新方法是这样的

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult DivisionGridUpdate([DataSourceRequest] DataSourceRequest  request, DivisionVm division)
    {

        if (division != null && ModelState.IsValid)
        {

           ......

        }


        return Json(new[] { division }.ToDataSourceResult(request, ModelState));
    }
4

1 回答 1

0

您是否尝试过在网格中将 DDL 的列设置为外键?

像这样:

columns.ForeignKey(p => p.yourproperty, (System.Collections.IEnumerable)ViewData["myList"], "Text", "Condition");

控制器(在这里您填写列表将填写下拉列表:

 ViewData["myList"] = myList.Select(e => new
            {
                Text= e.Text,
                Condition= e.Condition 
            });

在弹出的编辑器中,您只需简单:

 @Html.EditorFor(model=>model.yourproperty)
于 2013-11-04T19:56:32.020 回答