2012-02-09 20 views
0

我無法弄清楚如何將帶有DropDownList的<SelectListItem>文本從一個視圖傳遞到另一個視圖。如何將DropDownList中的<SelectListItem>文本傳遞給另一個視圖?

我使用的視圖:

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

在我的視圖模型(邁德特),我有:

[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 
    } 
} 

我使用嚮導,並希望通過在收集到的數據一步到確認頁面或我的代碼生成的電子郵件。

例如,如果我在視圖中做了@Html.EditorFor(m => m.FirstName),我可以通過執行@Model.FirstName將該輸入傳遞給確認視圖。

我有RadioButtons,我可以執行以下操作:@Html.Raw(MyNamespace.ViewModels.MyModel.MyPropertyDictionary.mypropertyDictionary[Model.MyProperty])將數據傳遞到我的確認視圖。但是我無法爲DropDown正確創建@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,我的觀點顯示

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

如果我使用@Model.MyProperty我得到的值,例如,

1 

我只需要弄清楚如何輸出實際的「文本」包含例如,在

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

任何如何做到這一點的例子將不勝感激。

+0

我們能看到你的控制器代碼? – sarvesh 2012-02-10 00:07:45

+0

@iaimtomisbehave更新後放置控制器代碼 - 讓我知道是否還有其他需要查看的內容。非常感謝 – REMESQ 2012-02-10 01:24:15

+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 2012-02-10 19:04:13

回答

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 2012-02-10 12:52:31

+0

@REMESQ,在你的視圖中替換下面一行:'this.MyPropertyList = new SelectList(mypropertylist,「Value」,「Text」);'this.MyPropertyList = mypropertylist;'或者直接初始化它。你不需要使用'SelectList',因爲你已經有一個'IEnumerable '。這是多餘的。 – 2012-02-10 12:54:18

+0

對不起,我意識到我發佈了最近更改的代碼,所以是的,我有'this.MyPropertyList = mypropertylist;'現在。上面編輯。 – REMESQ 2012-02-10 13:14:00

0

要只顯示從與@ Model.MyProperty值對應的SelectListItem文本可以使用

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

@itemText 
相關問題