【问题标题】:Passing Model via dropDownListFor() from view to controller通过 dropDownListFor() 将模型从视图传递到控制器
【发布时间】:2015-05-21 19:14:06
【问题描述】:

我正在尝试使用 dropDownListFor 将模型从我的视图传递到我的控制器。 从列表中选择某些内容后,它会将模型发送到我的控制器,但它的内容是 NULL。

这就是我的模型

public class Model
{
    public int ModelId { get; set; }
    [Required]
    public string Name { get; set; }
}

这就是我的 ViewModel 的样子

public class ModelVM
{
    public List<Model> Models;
    public Model SelectModel { get; set; }
    public IEnumerable<SelectListItem> ModelItems
    {
        get { return new SelectList(Models, "ModelId", "Name"); }
    }
}

我将数据放入 ViewModel 时的控制器如下所示

    public ActionResult Index()
    {
        ModelVM modelVM= new ModelVM()
        {
            Models = manager.GetAllModels().ToList()
        };
        return View(modelVM);
    }

最后,这就是我在 dropDownList 的视图中所拥有的

    @using (Html.BeginForm("Home", "Home", FormMethod.Post))
    {
        @Html.DropDownListFor(model => model.SelectModel, Model.ModelItems)
        <input type="submit" value="Go" />
    }

所以这应该将模型发送到我的控制器。 但是当我检查控制器中传递的模型的内容时,一切都是NULL,这不应该是因为当我调试视图并检查模型项的内容时,模型项中的所有内容都在那里。

这是我检查传递模型的内容时

 public ActionResult Home(Model model) <<<<<<<<<< Content == NULL
    {
        return View();
    }

【问题讨论】:

    标签: asp.net-mvc-4 razor html.dropdownlistfor


    【解决方案1】:

    回发单个值的&lt;select&gt; 元素。 Html 不知道您的 c# Model 类是什么,因此您无法绑定到复杂对象。您需要绑定到Model 的ModelId 属性。你的视图模型应该是

    public class ModelVM
    {
      [Display(Name = "Model")]
      public int SelectedModel { get; set; }
      public SelectList ModelItems { get; set ;}
    }
    

    在控制器中

    public ActionResult Index()
    {
        ModelVM modelVM = new ModelVM()
        {
            ModelItems = new SelectList(manager.GetAllModels(), "ModelId", "Name")
            // SelectedModel = ? if you want to preselect an item
        };
        return View(modelVM);
    }
    

    在视图中

    @Html.LabelFor(m => m.SelectedModel)
    @Html.DropDownListFor(m => m.SelectedModel, Model.ModelItems)
    

    在 post 方法中,您的模型将与所选模型的 ID 正确绑定

    【讨论】:

    • 如果我们在 ModelVM 中有更多属性会发生什么。它会起作用吗,否则我们不能在那里拥有更多的属性。
    • @HeemanshuBhalla,您可以在视图模型中拥有任意数量的属性
    【解决方案2】:

    尝试将 ModelVM 类型传递给 Home 操作,因为这是传递给 Index 视图的类型。

    下拉声明中不用model.SelectModel,只需要一个int ID就可以捕获选择了哪个ID。

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多