MVC如何从下拉列表中提交值

时间:2016-10-22 13:01:42

标签: asp.net-mvc

我正在尝试创建从其他模型列表中获取id的模型

请按照我的步骤更好地解释但在你做之前,我的目标是在我创建的模型与现有模型之间建立关系,所以也许我的方式都是错误的。

这是两个模型的关系
客户端Id< - >客户端Id
enter image description here

我的步骤是:

第1步:我创建了这个视图模型

 public class SubscriptionViewModel
{
    [Display(Name = "Client")]
    public int clientId { get; set; }
    [Required]
    [Display(Name = "Domain")]
    public string clientDomain { get; set; }
    [Required]
    [Display(Name = "Time")]
    public int subscriptionTime { get; set; }
    [Display(Name = "Document Access Key")]
    public string documentAccKey { get; set; }

}

步骤2:在我的控制器中,我获取了客户端列表并将其放入viewdata

我的[GET]创建动作

 public ActionResult Create()
    {
        ViewData["clientList"] = DbHandlers.GetClientsList();
        return View();
    }

enter image description here

第3步:从viewdata创建下拉列表

我的观点:

@model AccessibilityServiceControlPabel.Models.SubscriptionViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>SubscriptionViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            @Html.LabelFor(model => model.clientId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
               @Html.DropDownList("SelectedEmployee",new SelectList((System.Collections.IEnumerable)ViewData["clientList"], "ClientId", "ClientName"), "--Select--", new { @class = "form-control" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.clientDomain, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.clientDomain, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.clientDomain, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.subscriptionTime, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.subscriptionTime, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.subscriptionTime, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.documentAccKey, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.documentAccKey, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.documentAccKey, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

我的观点看起来很好

enter image description here

现在我的问题:
提交视图后,我没有获得选定的值clientId。

我的[HttpPost]创建动作(仍未完成)

 public ActionResult Create(SubscriptionViewModel subscriptionviewmodel)
    {
        var subscription = new Subscriptions();

        return RedirectToAction("Index");
    }

subscriptionviewmodel数据不包含clientId数据

这是我在视图中插入的数据

enter image description here

提交后,这就是我得到的 enter image description here

正如您所看到的,cientId为0,根据我的选择,它应该是1 有人可以帮我看看我哪里出错了吗?

通过获取clientId以及我真正需要的是发送所有客户端模型,我的方式是错误的。
我提醒我的主要目标是建立他们之间的关系。

提前致谢

2 个答案:

答案 0 :(得分:1)

将下拉列表的Name更改为model名称,在您的情况下,将名称从 SelectedEmployee 更改为 clientId

<div class="form-group">
            @Html.LabelFor(model => model.clientId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
               @Html.DropDownList("clientId",new SelectList((System.Collections.IEnumerable)ViewData["clientList"], "ClientId", "ClientName"), "--Select--", new { @class = "form-control" })
            </div>
        </div>

答案 1 :(得分:1)

你没有传递该字段以返回DropDownList(fistparameter,...)。这就是为什么它不会在表单发布期间将值返回到表单。将DropDownList的第一个参数(&#34; SelectEmployee&#34;,..)更改为您的模型属性名称。

 @Html.DropDownList("clientId",new SelectList((System.Collections.IEnumerable)ViewData["clientList"]....)