我觉得我正在服用疯狂的药片。我有一个视图的下拉列表,从我们的数据库中读取我们拥有的所有葡萄酒生产商。我想将selectedValue设置为由引用页面驱动的特定ID。我可以看到它在调试中选择了selectedValue,我看到填充了所选的值(本例中为906),但是在呈现页面时它没有将下拉列表设置为正确的值,默认情况下它总是默认为1值。我尝试在razor中创建selectList而不是我的控制器,但没有任何效果。任何有关这方面的帮助将不胜感激,我猜这是小事。
控制器:
if (User.IsInRole("admin"))
{
if (ID != 0)
{
ViewBag.ProducerSelect = new SelectList(db.Producers.OrderBy(p => p.Name), "ProducerID", "Name", ID);
}
else
{
ViewBag.ProducerSelect = new SelectList(db.Producers.OrderBy(p => p.Name), "ProducerID", "Name");
}
}
查看:
if (User.IsInRole("producereditor"))
{
<h3>@ViewBag.ProducerName</h3>
}
else
{
<div class="editor-label">
@Html.LabelFor(m => m.Wine.ProducerID, "Producer")
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.Wine.ProducerID, ViewBag.ProducerSelect as SelectList)
</div>
}
尝试以下但没有成功:
ViewBag.ProducerSelect = new SelectList(from p in db.Producers
orderby p.Name
select new { p.ProducerID, p.Name }
, "ProducerID", "Name", ID);
答案 0 :(得分:0)
使用ViewModel ex WineViewModel
public class WineViewModel
{
public Wine Wine { get; set; }
public SelectList PProducerList { get; set; }
public WineViewModel() { }
public WineViewModel(Wine wine)
{
this.Wine = wine;
}
}
在控制器中尝试以下操作 var model = new WineViewModel(selectwine);
model.ProjectTypeList = new SelectList( from p in db.Producers
orderby p.Name
select new { p.ID, p.Name }, "ID", "Name")
注意我是如何专门声明哪个是ID,哪个是我的SelectList中的值
然后在你看来做
@Html.DropDownListFor(model => model.Wine.ProducerID, Model.ProjectTypeList)
答案 1 :(得分:0)
如果要预先选择一个项目,请将该值设置为ProducerId属性。
var yourViewModelObj=new YourViewModel;
yourViewModelObj.Wine.ProducerId=906; //or whatever value you want
return View(yourViewModelObj);
建议 :为了更好的代码可读性/维护,请尽量避免使用ViewBag / ViewData并使用ViewModel传递数据。
我会在我的ViewModel中添加一个Property来保存Productions集合
public class WineViewModel
{
//Other Existing properties also
public IEnumerable<SelectListItem> Producers{ get; set; }
public string SelectedProducer { get; set; }
}
然后在你的GetAction方法中,你可以设置这样的值,如果你想设置一个选择选项作为默认选择选项。
public ActionResult CreateWine()
{
var vm=new WineViewModel();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.Producers= new[]
{
new SelectListItem { Value = "1", Text = "Prodcer A" },
new SelectListItem { Value = "2", Text = "Prodcer B" },
new SelectListItem { Value = "3", Text = "Prodcer C" }
};
//Now let's set the default one's value
vm.SelectedProducer = "2";
return View(vm);
}
在你的强类型视图中,
@Html.DropDownListFor(x => x.SelectedProducer,
new SelectList(Model.Producers, "Value", "Text"), "Select Producer")
上面代码生成的HTML标记将使用值为2的选项进行HTML选择,为selected
一个。
答案 2 :(得分:0)
我想出来了。我在页面的其他地方有一个隐藏字段中的ViewModel.wine.ProducerID,默认为1,所以我只是将其分配给传入值,并且效果很好。我知道它就是这样的。谢谢!