在部分视图中将自己的名称标记添加到表单组件 - MVC 5.0

时间:2014-01-20 14:21:19

标签: c# razor asp.net-mvc-5

我需要能够显示各个不同位置的某些项目的下拉列表...我可以放心地认为,考虑到它是一个下拉列表,它将始终用于表单的上下文中,因此名称标签将总是需要的。但是我想知道这类问题的最佳做法是什么。

我在局部视图中有以下内容,您可以看到我已明确设置name =“Name”,此时此刻正确地将映射到项目Class属性:

@model IEnumerable<TEST.Domain.Entities.James>

@{
    Layout = "";
}

<select name="Name" id="JamesDropdownList">
    @foreach (var item in Model)
    {
        <option value="@item.JamesID">@item.Name</option>
    }
</select>

然后我可以在这样的背景下使用这个局部视图:

        @using (Html.BeginForm("LoadInformation", "James"))
        { 
            <div class="col-lg-9  remove-padding-left">
                @{ Html.RenderAction("DropdownList", "James"); } // This is the partial view being used in a form
            </div>
            <div class="col-lg-3 remove-padding-right">
                @Html.ContinueButton("Continue") // This is a custom button html helper I have created
            </div>
        }

所以问题是,这绝对没问题,要明确声明这个选择字段的名称是“Name”还是有一些特殊聪明的razorey方法呢?

修改

事实上,我不是必须要做@ Html.Hidden(“JamesID”,item.JamesID)或其他选择吗?因此,当我提交该表单时,它将JamesID推送到控制器,如下所示:

    [HttpPost]
    public ViewResult LoadInformation(int jamesID)
    {
        // Do something with jamesID
        return View("LoadInformation");
    }

你可以看到我有点困惑......

也许更好的问题是,我如何拥有一个可重复使用的下拉列表,我可以在一个表格中使用该表格,该表格要求该下拉列表中的JamesID作为接收控制器的参数之一?

1 个答案:

答案 0 :(得分:1)

一种可行的方式是:

@Html.DropDownList("JamesDropdownList", new SelectList(Model,"JamesID","Name"))

这会将JamesDropdownList分配给下拉列表的nameid属性。