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>

コントローラーに値をフェッチする関数を記述しましたが、値をフェッチすることもできますが、ビューに入ると値が表示されません。次の
ような別のドロップダウンを作成しました。

  @Html.DropDownListFor(model => model.Hobbydetail.Hobbymaster.HobbyId, new SelectList(ViewBag.Hobby, "HobbyId", "HobbyName"), "----Select Hobby----", new { @id = "Hobby" })<font color="red">*</font> 

そして、奇妙なことに、2番目のドロップダウンの値は表示されますが、最初のドロップダウンの値は表示され ないということです。最初のドロップダウンでlist.First()
を使用しているため、この問題が発生している可能性があります。最初のドロップダウンの値として「-----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 にすべての要素を含めるには、Edit ビューを表示する前に、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 : 返すフォーム フィールドの名前。

2番目のアプローチを使用する必要があります

これを処理するために、きれいな 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 に答える