0

这听起来很简单,但我遇到了一个非常奇怪的问题。

我在我的应用程序中创建了下拉列表,但无法在编辑时获取选定的值。

这是我的观点:

<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 在编辑视图页面上仅向我显示“-----Select State--”作为第一个下拉列表的值。
请帮我

4

2 回答 2

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 已初始化并在显示编辑视图之前填充到您的控制器中!

于 2012-05-08T14:36:06.313 回答
0

First()方法返回序列的第一个元素。如果源序列为空,它会抛出异常。

为什么你需要在那里使用 First() ?我认为你做错了。你的第一个参数DropDownListFor应该是一个保存所选值的变量,在你使用的这个特殊的重载中。

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList,
    IDictionary<string, Object> htmlAttributes
)

name:要返回的表单字段的名称。

您应该使用第二种方法

我会制作一个干净的 ViewModel 来处理这个问题。这使我的 Views Clean

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
}
于 2012-05-08T14:40:24.763 回答