首页 文章

在MVC 5.0中编辑聚合对象时从下拉列表中获取选定值

提问于
浏览
1

DropDownList 瞄准模型内对象的一个字段时,我无法从 DropDownList 获取值 .

@ Html.DropDownList(“MyID”,null,htmlAttributes:new {@class =“form-control”})

ViewBag充满了这个:

ViewBag.MyID = new SelectList(db.WFMasters, "MyID", "Code", wFDefDetail.wfDef.MyID); //MyID is property of wfDef. Model is wFDefDetail.

如果目标值是模型的属性,我可以毫不费力地获得 DropDownList 的值 .

在这种情况下,DropDownList已正确填充,但我没有在View Controller方法中获得所选值 . 控制器为wFDefDetail.wfDef.MyID接收null .

此外,如果我更改为@ html.EditorFor方法,我可以获得wFDefDetail.wfDef.MyID的值,所以必须是一些细节我想念DropDownList也工作 .

2 回答

  • 1

    要正确地映射数据,请按下面的模型匹配 name 属性:

    @Html.DropDownList("wfDef.MyID", (IEnumerable<SelectListItem>)ViewBag.MyID, htmlAttributes: new { @class = "form-control" })
    
  • 0

    您可以使用下拉列表change event handler将表单发送到您的服务器 . 在下面的示例中,当更改选择控件时,将发送对您的配置文件的请求 . 选定的选项值将作为 tab 参数与请求一起发送 .

    $("[name=tab]").change(function() {
      $(this).parent("form").submit();
    });
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form action="https://stackoverflow.com/users/2700303/byteartisan">
      <select name="tab">
        <option value="default" disabled="disabled">Select tab...</option>
        <option value="profile">Profile Tab</option>
        <option value="topactivity">Activity Tab</option>
      </select>
    </form>
    

    如果表单仅包含单个数据字段,那么您可以直接在操作方法中获取选项卡值:

    public ActionResult MyAction(string tab)
    {
        string SelectedValue = tab;
        // do something
    }
    

    如果表单发送自定义类描述的复杂数据,请使用参数对象的相应属性,例如:

    public ActionResult MyAction(CustomType FormData)
    {
        string SelectedValue = FormData.tab;
        // do something
    }
    

相关问题