11

我有一个 html 选择器,我想在我的表单中为我的“model => model.type”使用选定的值。有没有办法将 my@Html.EditorFor(model => model.type)中的值设置为选择器的值?

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Bet</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.type)
    </div>
    <div class="editor-field">

        <select id ="type">
  <option value="Football">Football</option>
  <option value="Rugby">Rugby</option>
  <option value="Horse Racing">Horse Racing</option>
</select>

        @Html.EditorFor(model => model.type)
        @Html.ValidationMessageFor(model => model.type)

    </div>



    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
4

5 回答 5

23

您可以尝试使用以下选项:

模型:

public string Type { get; set; }

public IEnumerable<SelectListItem> TypeList
{
    get
    {
        return new List<SelectListItem>
        {
            new SelectListItem { Text = "Football", Value = "Football"},
            new SelectListItem { Text = "Rugby", Value = "Rugby"},
            new SelectListItem { Text = "Horse Racing", Value = "Horse Racing"}
        };
    }
}

HTML(剃刀):

@Html.DropDownListFor(model => model.Type, Model.TypeList)

或者

HTML(剃刀):

@Html.DropDownListFor(model => model.Type, new SelectList(new string[] {"Football", "Rugby", "Horse Racing"}, Model.Type))
于 2012-12-14T21:19:43.800 回答
4

@andresdescalzo 的解决方案(最后一个)只需稍作改动即可:

@Html.DropDownListFor(model => model.Type, new SelectList(new string[] {"Football", "Rugby", "Horse Racing"}, "Rugby"), htmlAttributes: new { @class = "form-control" })


第一:为下拉列表添加一个选定的项目(例如“橄榄球”)
第二:删除最后一个Model.Type并添加htmlAttributes

PS:SelectedList 打开括号在列表的选定项目后关闭(这里是“ Rugby”)

于 2017-11-19T21:03:40.907 回答
1

@andresdescalzo 提供的解决方案仅在我们将模型从 Controller 传递到视图时才有效。

public class SomeController : Controller
{
  public ActionResult SomeAction()
  {
    return View(new SomeModelWithIEnumerationsSelectListItem())
  }
}
于 2017-03-03T04:15:39.323 回答
0

现有答案的补充:如果在实现@andresdescalzo 的解决方案时遇到异常“对象引用未设置为对象的实例”,则需要:

  1. 如@diwas 所述,返回您正在使用的模型
  2. 在 razor 页面上实例化一个模型,以便您可以调用该方法。如果您使用 ViewModel 而不是简单的 EF 模型,这将很有帮助。

第二个可以这样做:

@{ var tempModel = new YourNameSpace.Models.YourModel(); }
@Html.DropDownListFor(model => model.Type, tempModel.TypeList, Model.Type))
于 2017-06-22T18:28:02.143 回答
0

这是剃刀视图

    <div class="editor-field col-md-3">          
        @Html.DropDownListFor(model => model.Servers, 
          Model.AvailableServers,new { @class = "form-control" })  
         @Html.ValidationMessageFor(model => model.SqlServerName)
    </div>

来自控制器的动态下拉菜单

        List<SelectListItem> ServersAvailable = new List<SelectListItem>();
            bool IdSelected = false;
            ServersAvailable.Add(new SelectListItem { Text = "......Select your server name......", Value = "" });
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ServersAvailable.Add(new SelectListItem
                {

                    Text = dt.Rows[i].ItemArray[0].ToString(),
                    Value = dt.Rows[i].ItemArray[0].ToString(),
                    Selected = IdSelected
                });
            }
于 2018-08-01T05:29:44.507 回答