视图中的ASP.NET MVC绑定值

时间:2017-08-14 19:25:24

标签: c# asp.net-mvc

努力从下拉列表中获取值,将其传递到我的控制器以进行数据库插入。 它从下拉列表中的每个项目的简单类开始。

 public class selectListUrgencyNum
{
    public string Text { get; set; }
    public string Value { get; set; }
}

然后在我的视图模型中,我创建了这些对象的列表..

public class createViewModel
{
    public Change Changevm { get; set; }

    public List<RequestType> rTypes { get; set; }

    public List<selectListUrgencyNum> listUrgency { get; set; }
}

最后是我的控制器我填充此列表以显示在下拉列表中。

public ActionResult Create()
    {

        var urgNums = new List<selectListUrgencyNum>();
        for(int i = 1; i < 6; i++)
        {
            urgNums.Add(new selectListUrgencyNum() { Text = i.ToString(), Value = i.ToString() });
        }

        var viewModel = new createViewModel
        {
            listUrgency = urgNums 
        };



        return View(viewModel);
    }

我只使用了1 - 5,以便更容易理解。

我的视图会像这样创建ddl。

  <div class="form-group">
        @Html.LabelFor(model => model.Changevm.UrgencyNum, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-2">
            <select class="form-control" id="select">
                <option> 1 = Least Urgent</option>
                @foreach(var item in Model.listUrgency)
                {
                    <option>@item.Text</option>
                }
                </select>
             @*How do I grab the value of what is selected??*@
          @Html.ValidationMessageFor(model => model.Changevm.UrgencyNum, "", new { @class = "text-danger" })
         </div>

所以我不确定如何获得所选下拉选项的值,以便在我的插入中我可以访问它。可能是隐藏的?

如果我使用隐藏的,它看起来怎么样?

如果已经回答,请链接..

2 个答案:

答案 0 :(得分:1)

如果您只想传递Text和Value,可以使用System.Web.Mvc中的SelectListItem类,该类用于将项目传递到下拉列表。

public class CreateViewModel
{
    public Change ChangeVm { get; set; }

    public List<RequestType> Types { get; set; }

    public List<SelectListItem> ListUrgency { get; set; }
}

在Controller Create()方法中,我们还创建了新的ChangeVm

var viewModel = new CreateViewModel()
{
    ChangeVm = new Change(),
    ListUrgency = urgNums
};

return View(viewModel);

在视图上,您​​可以使用Html.DropDownListFor扩展方法,该方法将负责创建包含给定项目和专有名称的列表。

Html.BeginForm将负责使用正确的“操作”网址和方法创建表单。

@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
<div class="form-group">
    @Html.LabelFor(model => model.ChangeVm.UrgencyNum, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-2">
        @Html.DropDownListFor(model => model.ChangeVm.UrgencyNum, Model.ListUrgency, "Choose Urgency...")
        @Html.ValidationMessageFor(model => model.ChangeVm.UrgencyNum, "", new { @class = "text-danger" })
    </div>
    <input type="submit" value="Submit"/>
</div>
}

然后在控制器中,您可以使用

    [HttpPost]
    public ActionResult Create(CreateViewModel vModel)
    {
        if(vModel?.ChangeVm?.UrgencyNum != null)
        {
            var chosenValue = vModel.ChangeVm.UrgencyNum;
        }

        return View(vModel);
    }

如果一切顺利,您应该在vModel.ChangeVm.UrgencyNum中选择您的值

答案 1 :(得分:0)

name属性添加到select

<select class="form-control" id="select" name="selectedUrgency">

在控制器发布的操作中,假设我们有Create2操作方法。我们可以从Request对象中检索值。

[HttpPost]
public ActionResult Create2()
{
   var value = Request["selectedUrgency"];
} 

假设您的给定html包含<form>标记,并且操作网址指向此操作方法。