【问题标题】:Passing Data From View back to the HttpPost method in MVC将数据从视图传回 MVC 中的 HttpPost 方法
【发布时间】:2013-11-18 12:36:28
【问题描述】:

好的,所以我想将视图中的数据传递回控制器中的 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的情况下在视图中执行相同的功能?

非常感谢。

【问题讨论】:

  • 我不知道如何使用 ajax,这就是我问这个问题的原因,我想要一种传递数据的方法,而关于对象,我不能做“html.textboxfor(u=>u .something)",每当我输入它时就会出现错误。

标签: asp.net-mvc ienumerable


【解决方案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。有很多很多的例子。

【讨论】:

  • 我刚试过这个,我得到了以下错误:“传入字典的模型项的类型是'System.Collections.Generic.List`1[MvcMobile.Models.Trips]',但是这个字典需要一个“MvcMobile.Models.ViewModel1”类型的模型项。”有什么想法吗?
  • 因为您仍在将 db.Trips 传递给您的视图。您将需要创建一个新的 ViewModel 并将 Trips 属性设置为 db.Trips。 var viewModel = new ViewModel { Trips = db.Trips.ToList() }; return View(viewModel);
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多