Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3 DropDownListFor-一个简单的例子?_C#_Asp.net Mvc 3_Html.dropdownlistfor - Fatal编程技术网

C# MVC3 DropDownListFor-一个简单的例子?

C# MVC3 DropDownListFor-一个简单的例子?,c#,asp.net-mvc-3,html.dropdownlistfor,C#,Asp.net Mvc 3,Html.dropdownlistfor,我的MVC3应用程序中的DropDownList for有问题。我能够使用StackOverflow来找出如何让它们出现在视图上,但现在我不知道如何在提交视图模型时捕获其相应属性中的值。为了实现这个功能,我必须创建一个具有ID和value属性的内部类,然后我必须使用IEnumerable来满足DropDownListFor参数要求。然而,现在MVC FW应该如何将在此下拉列表中选择的值映射回视图模型上的简单字符串属性 public class MyViewModelClass { pub

我的MVC3应用程序中的DropDownList for有问题。我能够使用StackOverflow来找出如何让它们出现在视图上,但现在我不知道如何在提交视图模型时捕获其相应属性中的值。为了实现这个功能,我必须创建一个具有ID和value属性的内部类,然后我必须使用IEnumerable来满足DropDownListFor参数要求。然而,现在MVC FW应该如何将在此下拉列表中选择的值映射回视图模型上的简单字符串属性

public class MyViewModelClass
{
    public class Contrib
    {
        public int ContribId { get; set; }
        public string Value { get; set; }
    }

    public IEnumerable<Contrib> ContribTypeOptions = 
        new List<Contrib>
        {
            new Contrib {ContribId = 0, Value = "Payroll Deduction"},
            new Contrib {ContribId = 1, Value = "Bill Me"}
        };

    [DisplayName("Contribution Type")]
    public string ContribType { get; set; }
}
在我看来,我将下拉列表放置在页面上,如下所示:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>
@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))
当我提交表单时,ContribType当然是空的


正确的方法是什么?

您应该这样做:

<div class="editor-label">
    @Html.LabelFor(m => m.ContribType)
</div>
<div class="editor-field">
    @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, 
             new SelectList(Model.ContribTypeOptions, "ContribId", "Value"))
</div>
@Html.DropDownListFor(m => m.ContribType, 
                new SelectList(Model.ContribTypeOptions, 
                               "ContribId", "Value"))
其中:

m => m.ContribType

是将显示结果值的属性

要在DropDownList中绑定动态数据,可以执行以下操作:

在控制器中创建ViewBag,如下所示

ViewBag.ContribTypeOptions = yourFunctionValue();
现在在视图中使用此值,如下所示:

@Html.DropDownListFor(m => m.ContribType, 
    new SelectList(@ViewBag.ContribTypeOptions, "ContribId", 
                   "Value", Model.ContribTypeOptions.First().ContribId), 
    "Select, please")
我认为这将有助于: 在控制器中获取列表项和所选值

public ActionResult Edit(int id)
{
    ItemsStore item = itemStoreRepository.FindById(id);
    ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), 
                                        "Id", "Name",item.CategoryId);

    // ViewBag to pass values to View and SelectList
    //(get list of items,valuefield,textfield,selectedValue)

    return View(item);
}
以及

@Html.DropDownList("CategoryId",String.Empty)

此处的值是要保存所选值的模型对象

谢谢!!!谢尔盖,这正是我找了好几个小时的东西。谢谢你的回答,有没有办法从这里显示-选择-呢@VeeKeyBee,您可以向列表contribTypeOptions添加新项,例如new Contrib{ContribId=-1,Value=Please Select},它将显示在下拉列表中。然后,您可以检查ContribType是否为-1这意味着用户尚未选择任何值您可以执行以下操作:@Html.DropDownListForm=>m.ContribType,新建SelectListModel.ContribTypeOptions,ContribId,Value,Model.ContribTypeOptions.First.ContribId,Select,please@SergeyGavruk. 在最近的几个问题上,这个答案被用作一个复制品,但由于该语句和Select list构造函数的最后一个参数是一个选定的值,因此使一些用户感到困惑-最后一个参数被内部构建自己的SelectList的方法忽略。它是属性ContribType的值,它决定了所选择的内容,这就是模型绑定的工作方式,代码应该是@Html.DropDownListForm=>m.ContribType,new SelectListModel.ContribTypeOptions,ContribId,请编辑答案以更正。将存储库暴露在这样的视图中通常不是上帝模式。