我在编辑器模板中有一个Html.DropDownListFor,它点设置一个选定的值。 如果我将编辑器模板替换为部分视图(将编辑器模板中的HTML粘贴复制到部分视图中),则可以正常工作。
示例代码
型号:
public class MainItemViewModel
{
public int MainItemId { get; set; }
public ItemViewModel ItemViewModel { get; set; }
}
public class ItemViewModel
{
public int ItemId { get; set; }
public string Text { get; set; }
public IEnumerable<SelectListItem> ItemSelectList { get; set; }
}
控制器:
public class DropDownController : Controller
{
//
// GET: /DropDown/
public ActionResult Index()
{
var mainItemViewmodel = new MainItemViewModel();
mainItemViewmodel.MainItemId = 2;
mainItemViewmodel.ItemViewModel = new ItemViewModel();
mainItemViewmodel.ItemViewModel.ItemId = 2;
mainItemViewmodel.ItemViewModel.Text = "bla5";
List<SelectListItem> someItems = new List<SelectListItem>(){new SelectListItem(){Value = "1",Text = "Test1"},new SelectListItem(){Value = "2",Text = "Test2"}};
mainItemViewmodel.ItemViewModel.ItemSelectList = someItems;
return View(mainItemViewmodel);
}
[HttpPost]
public ActionResult Index(MainItemViewModel mainItemViewModel)
{
return RedirectToAction("Index");
}
}
下拉\ Index.chtml
@model MainItemViewModel
@using (Html.BeginForm())
{
<br/>
@Html.TextBoxFor(model => model.MainItemId)
<br/>
@Html.EditorFor(model => model.ItemViewModel)
<input name="submit" type="submit" value="submit"/>
}
下拉\ EditorTemplates \ ItemViewModel.chtml
@model ItemViewModel
@{
@Html.DropDownListFor(model => model.ItemId, Model.ItemSelectList, "Select Item");
<br/>
@Html.TextBoxFor(model => model.Text);
}
DropDownListFor(model =&gt; model.ItemId,Model.ItemSelectList,“Select Item”);没有选择2.我认为它实际上应该为你自动选择
我一直在做同样的事情除了在我的所有下拉列表中都有另一个视图模型,并且它运行良好。
编辑器模板和下拉列表是否存在问题,我已查看此问题的大多数答案,但我看不到任何有效的结论 我看过这些解决方案
Problem binding selected value to DropDownListFor inside Editor Template
答案 0 :(得分:0)
我想你的ItemId
ItemViewModel
的媒体资源
然后确保在将ViewModel发送到View之前在Controller中设置它的值:
public ActionResult Edit()
{
var viewModel = new MainViewModel
{
ItemViewModel = new ItemViewModel{ ItemId = 7 }
};
return View(viewModel);
}
如果您想了解更多选项,请查看my answer here