在创建或编辑操作中从下拉列表中保存数据

时间:2014-02-03 10:25:08

标签: html5 asp.net-mvc-4

这是我的模特。

public class Territory
    {
        [Display(Name = "ID", ResourceType = typeof(Resources.Resource))]
        public long ID { get; set; }

        [Display(Name = "Name", ResourceType = typeof(Resources.Resource))]
        public string Name { get; set; }

        [Display(Name = "Code", ResourceType = typeof(Resources.Resource))]
        public string Code { get; set; }

        [Display(Name = "ProviderKey", ResourceType = typeof(Resources.Resource))]
        public string ProviderKey { get; set; }

        [Display(Name = "Provider", ResourceType = typeof(Resources.Resource))]
        public string Provider { get; set; }

        [Display(Name = "Countries", ResourceType = typeof(Resources.Resource))]
        public virtual IList<Country> Countries { get; set; }

        [Display(Name = "Rights", ResourceType = typeof(Resources.Resource))]
        public IList<RightApplication> Rights { get; set; }
    }

这是我的控制器编辑操作。

 public ActionResult Edit(long id) {
            var territory = new db.Territories.FindAsync(id);
            if(territory == null) return HttpNotFound();
            ViewBag.Countries = new SelectList(db.Countries.AsEnumerable(), "ID", "Name");
            return View("Edit", territory);

        }

这是我的索引视图。

@foreach (var item in Model.Items)
{
    <div class="col-lg-2 col-md-3 col-sm-3 col-xs-1">
        <h4 class="pull-right" style="margin:4px;"><a href="@Url.Action("Edit", "Territory", new {id=item.ID })"><i class="fa fa-edit"></i></a>-<a href="@Url.Action("Details", new { id = item.ID, isDelete = true })"><i class="fa fa-trash-o"></i></a></h4>
        <div class="panel panel-success territory panel-scroll">
            <div class="panel-heading">@item.Name</div>
            <div class="panel-body">
                <ul class="list-group">
                    @foreach (var country in item.Countries)
                    {
                        <li class="list-group-item">@country.Name</li>
                    }
                </ul>
            </div>
        </div>
    </div>
}

这是我的创建视图。

@using (Html.BeginForm(htmlAttributes: new { @class = "form single-col" }))
    {
        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.ID)
        <div class="form-group">
            @Html.LabelFor(model => model.Name)
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Code)
            @Html.EditorFor(model => model.Code)
            @Html.ValidationMessageFor(model => model.Code)
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.ProviderKey)
            @Html.EditorFor(model => model.ProviderKey)
            @Html.ValidationMessageFor(model => model.ProviderKey)
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Provider)
            @Html.EditorFor(model => model.Provider)
            @Html.ValidationMessageFor(model => model.Provider)
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Countries)
           @Html.DropDownList("Countries")

        </div>

        <div class="form-group">
            <div class="controls">
                <div class="btn-group">
                    @if (Model.ID == 0)
                    {
                        <button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> Create</button>
                    }
                    else
                    {
                        <button type="submit" class="btn btn-primary"><i class="fa fa-pencil"></i> Update</button>
                    }
                    <a class="btn btn-info" href="@Url.Action("Index")"><i class="fa fa-arrow-left"></i> Back to List</a>
                </div>
            </div>
        </div>
    }

我正在尝试从DropdownList中选择Country来显示在Index视图中。我在索引视图中获得了Territory Name,但我无法在Territory中添加Country Name。

1 个答案:

答案 0 :(得分:0)

有两种方法可以从下拉列表中保存数据。第一个是更多的工作,并不是那么可靠。查看渲染下拉列表,如果没有名称,请添加一个

@Html.DropDownList("Countries", Model.CountriesList, new { name = "Country" })

在您的控制器上,您可以通过

获取所选值
Request.Form["Country"].ToString();

我建议的方法是将您的下拉菜单更改为帮助者

@Html.DropDownListFor(x => x.Country, Model.CountriesList)

这会将所选值绑定到您的模型(在本例中为Country),然后您可以在post方法中将其拉出