如何将DropDownList中的<selectlistitem>文本传递给另一个视图?</selectlistitem>

时间:2012-02-09 23:55:01

标签: asp.net-mvc drop-down-menu

我无法弄清楚如何将带有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"))
    ...
}

在我的ViewModel(MyData)中,我有:

[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(假设这是我必须要做的)。

谢谢!

更新(根据评论请求添加控制器代码):

控制器:

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();部分。)
  3. 更新

    如果我在确认视图中@Model.MyPropertyList,我的视图会显示

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

    如果我使用@Model.MyProperty,我会获得该值,例如

    1 
    

    我只需要弄清楚如何输出包含的实际“文本”,例如

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

    非常感谢任何如何做到这一点的例子。

3 个答案:

答案 0 :(得分:0)

提交包含下拉列表的表单时,只会将选定的值发送到服务器。如果要获取相应的文本,可以使用此选定值并搜索相应的列表。

此外,您无需手动将(Please select)项添加到您的收藏中。这可以直接在视图中完成:

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

答案 1 :(得分:0)

要显示SelectListItem中与@ Model.MyProperty值对应的文本,您可以使用

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

@itemText

答案 2 :(得分:0)

//controller
TempData["TaxType"] = act.GetTaxType();



//view
 @foreach (var item in (List<SelectListItem>) TempData["TaxType"])
            {
                <option value="@item.Value" >@item.Text</option>
            }