2012-02-09 1 views
0

<SelectListItem>のテキストをDropDownListと共にあるビューから別のビューに渡す方法を理解できません。私はビューで、次の使用していますDropDownListの<SelectListItem>テキストを別のビューに渡すにはどうすればよいですか?

:私は、ウィザードを使用しています

[Serializable] 
public class MyData 
{ 
public int MyProperty{ get; set; } 
public IEnumerable<SelectListItem> MyPropertyList{ get; set; } 
... 
public MyData() 
    { 
     var mypropertylist = new List<SelectListItem>() { 
      new SelectListItem { Text = "(Please select)" }, 
      new SelectListItem { Value = "1", Text="Some text." },     
      new SelectListItem { Value = "2", Text="Some other text." } 
      }; 
     this.MyPropertyList = mypropertylist; //Edited 
    } 
} 

とで収集されたデータを渡したい:私のViewModelに(のMyData)では

@using (Html.BeginFormAntiForgeryPost()) 
{ 
    @Html.Hidden("myData", new MvcSerializer().Serialize(Model, SerializationMode.Signed)) 
    ... 
    @Html.DropDownListFor(m => m.MyProperty, new SelectList(Model.MyPropertyList, "Value", "Text")) 
    ... 
} 

を、私は持っています確認ページまたは私のコードが生成する電子メールへの1つのステップ。

たとえば、ビューで@Html.EditorFor(m => m.FirstName)を実行すると、@Model.FirstNameを入力することで、その入力を確認画面に渡すことができます。

私は次のことを行うことができるラジオボタンを持っています:@Html.Raw(MyNamespace.ViewModels.MyModel.MyPropertyDictionary.mypropertyDictionary[Model.MyProperty])データを確認画面に渡します。しかし、私は適切に作成することができません@Html.Raw(それは私がしなければならないだろうと仮定)のドロップダウン。

ありがとうございます!

UPDATE(コメント要求あたりのコントローラコードを追加するには):

コントローラー:注意すべき

private MyData myData; 
.... 
// 
// STEP 1: 
// AskUs 
public ActionResult AskUsDetails(string nextButton) 
{ 
    if ((nextButton != null) && ModelState.IsValid) 
     return RedirectToAction("AskUsSubmitted"); 
    return View("AskUs/Details", myData); 
} 
// 
// STEP 2: 
// AskUs/Submitted 
public ActionResult AskUsSubmitted() 
{ 
    // Todo: Save myData database; render a "Submitted" view 
    MyMailer.AskUs(myData).Send(); 
    return View("AskUs/Submitted", myData); 
} 

もの:

  1. 直列化部分がコントローラにあります。その関連性があるかどうかは分かりません(もし私が知っていると私は上記のコードの中で編集します)。
  2. MvcMailerを使用しているので、他に2つのファイルがありますが、関連性があるかどうかわかりません(上記のMyMailer.AskUs(myData).Send();部分です)。

UPDATE:私は確認ビューで@Model.MyPropertyListを行う場合

、私の見解は、私は@Model.MyPropertyを使用している場合は、私は、例えば、

1 
を値を取得しています

System.Collections.Generic.List1[System.Web.Mvc.SelectListItem] 

示し

私はちょうど実際の "テキスト"をどのように出力するかを理解する必要があります

new SelectListItem { Value = "1", Text="**Some text.**" } 

これを行う方法の例は非常に高く評価されます。

+0

私たちはあなたのコントローラのコードを見ることができますを使用することができ、@のModel.MyProperty値に対応するSelectListItemからテキストを表示するには? – sarvesh

+0

@iaimtomisbehaveコントローラーコードを入力するように更新されました。あなたが見る必要があるものがあれば教えてください。大いに感謝します – REMESQ

+0

私のDDLチュートリアルをご覧くださいhttp://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT

答えて

0

ドロップダウンリストを含むフォームを送信すると、選択した値のみがサーバーに送信されます。対応するテキストを取得する場合は、この選択した値を使用して対応するリストを検索します。

また、(Please select)アイテムをコレクションに手動で追加する必要はありません。これは、直接ビューで行うことができます。

@Html.DropDownListFor(
    m => m.MyProperty, 
    Model.MyPropertyList, 
    "(Please select)" 
) 
+0

ビューに直接テキストを挿入するヒントをありがとう。私はまだ値を出力するための構文に苦しんでいます。確認ビューで '@ Model.MyPropertyList'を実行すると、私のビューは' System.Collections.Generic.List'1 [System.Web.Mvc.SelectListItem] 'を表示します。 '@Model.MyProperty'を使用すると、値が取得されます(例:' 1')。 – REMESQ

+0

@REMESQの場合は、ビューの次の行を置換してください: 'this.MyPropertyList = new SelectList(mypropertylist、" Value "、" Text ");' this.MyPropertyList = mypropertylist; IEnumerable を既に持っているので、 'SelectList'を使う必要はありません。それは冗長です。 –

+0

申し訳ありませんが、私は最近変更されたコードを投稿したことに気づいたので、私は 'this.MyPropertyList = mypropertylist;'今。上記の編集。 – REMESQ

0

ちょうどあなたが

@{ 
    var item = Model.PropertyList.FirstOrDefault(a => a.Value == Model.MyProperty.ToString()); 
    var itemText = item.Text;        
} 

@itemText 
関連する問題