将数据从View传递回MVC中的HttpPost方法

时间:2013-11-18 12:36:29

标签: asp.net-mvc ienumerable

好的,所以我想将视图中的数据传回控制器中的Post方法。

观点:

    @model IEnumerable< MvcMobile.Models.Trips>

<p>Time : @ViewBag.titi</p>
<p>ID :@ViewBag.iid </p>

<p>From : @ViewBag.From</p>
<p>To :@ViewBag.To </p>


Avaibliabe Trips : 
@foreach (var item in Model)
{
    if ( item.Time==ViewBag.titi)
    {
    <p>@item.TripID</p>
}
}

控制器中的我的HttpGet方法:

 [HttpGet]
    public ActionResult Book2(MvcMobile.Models.TicketsBooked tik)
    {

        ViewBag.titi = tik.Time;
        ViewBag.iid = tik.TicketID;
        ViewBag.from = tik.From;
        ViewBag.To = tik.To;
        var TripsList = db.Trips.ToList();
        return View(TripsList);



    }

在这种情况下,我无法使用动态对象传递变量,因为模型是 IEnumerable

我想将一个或两个文本框传回控制器,我该怎么做?

替代问题将是如何在视图中执行相同功能而不使模型 IEnumberable

并非常感谢。

1 个答案:

答案 0 :(得分:1)

您应该阅读使用视图模型。基本上,最佳做法是仅将相关数据传递给视图。因此,在传递IEnumerable模型时,您将拥有一个具有IEnumerable属性的视图模型,以及您想要发布回控制器的额外属性。

例如:

public class ViewModel
{
    public IEnumerable<MvcMobile.Models.Trips> Trips { get; set; }
    public string ExtraValue { get; set; }
}

您的观点是:

@foreach(var trip in Model.Trips)
{
     <p>Do stuff</p>
}

@Html.TextBoxFor(m => m.ExtraValue)

您的post方法将接受ViewModel。

[HttpPost]
public ActionResult Book2(ViewModel viewModel) 
{
}

您可以阅读有关视图模型here或搜索Google / SO的更多信息。有许多例子。