这可能听起来很简单,但我却陷入了一个非常奇怪的问题。
我在我的应用程序中创建了下拉列表,但我无法在编辑时获取所选值。
这是我的观点:
<div class="editor-field">
@Html.DropDownListFor(model => model.Hobbyhome.HobbyHomeAddressList.First().ProvincialState.ProvincialStateID, new SelectList(ViewBag.State, "ProvincialStateID", "ProvincialStateName"), "-----Select State-----", new { @id = "State" })<font color="red">*</font>
</div>
我在控制器中写了一个函数来获取值,我也可以获取值但是当它进入View时它不会显示值
我创建了另一个这样的下拉列表:
@Html.DropDownListFor(model => model.Hobbydetail.Hobbymaster.HobbyId, new SelectList(ViewBag.Hobby, "HobbyId", "HobbyName"), "----Select Hobby----", new { @id = "Hobby" })<font color="red">*</font>
奇怪的是,我可以看到第二次下拉的价值,但不是第一次下注
我的想法可能是因为我在第一个下拉列表中使用了 list.First(),因此很容易出现这个问题bcoz在编辑视图页面上它只显示“-----选择状态 - - “作为第一次下拉的价值。
请帮帮我
答案 0 :(得分:0)
要在编辑视图中获取“选定值对象”:
@Html.DropDownListFor(model => model.Hobbydetail.Hobbymaster.HobbyId,
new SelectList(ViewBag.Hobby, "HobbyId", "HobbyName", Model.Hobbydetail.Hobbymaster.HobbyId),
"----Select Hobby----", new { @id = "Hobby" })
要在DropDown中包含所有元素,请确保在显示编辑视图之前初始化ViewBag.Hobby并将其填充到控制器中!
答案 1 :(得分:0)
First()
方法返回序列的第一个元素。如果源序列为空,它将抛出异常。
为什么你需要在那里使用First()?我认为你是以错误的方式做的。你的DropDownListFor
的第一个参数应该是一个保存所选值的变量,在你正在使用的这个特殊超载中。
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList,
IDictionary<string, Object> htmlAttributes
)
name :要返回的表单字段的名称。
你应该使用第二种方法
我会制作一个干净的ViewModel来处理这个问题。 这使我的视图干净。
public class AddHobbyViewModel
{
public int SelectedHobbyId { set;get;}
public IEnumerable<Hobby> Hobbys { set;get;}
//other relevant properties for the View.
}
在GET操作方法中,我不是在ViewBag中返回数据,而是在ViewModel中返回它。
public ActionResult Add()
{
AddHobbyViewModel model=new AddHobbyViewModel ();
model.Hobbys=db.Hobbies(); // get all available hobbies.
return View(model);
}
在视图中,
@Html.DropDownListFor(model => SelectedHobbyId , new SelectList(Hobbys , "HobbyId", "HobbyName"), "----Select Hobby----", new { @id = "Hobby" })
现在,您将在SelectedHobbyId属性中的httppost方法中获得所选值
[HttpPost]
public ActionResult Add(AddHobbyViewModel model)
{
// check model.SelectedHobbyId here
}