如何从视图将两个相同属性的实例发布到操作?

时间:2011-12-04 15:11:53

标签: asp.net-mvc forms asp.net-mvc-2

如何从表单发送数据,两个字段相同:站名,但它们具有不同的值。如何通过post方法将它们发送给控制器。 Asp.net mvc2

这是我尝试的:

 <% using (Html.BeginForm("ViewRes", "Shedule"))
       {%>
    <%= Html.ValidationSummary(true) %>
    <fieldset>
        <legend>Поиск по расписанию:</legend>
        <ul>
        <li>Из<%= Html.EditorFor(model => model.StationName) %></li>
        <li>В<%= Html.EditorFor(model1 => model1.StationName) %></li>
        <li>Дата отправления</li>
        </ul>
        <p>
            <input type="submit" value="OK" />
        </p>
    </fieldset>
    <% } %>

和这样的控制器:

 [HttpPost]
        public ActionResult ViewRes(string a1, string b1)
        {

            DateTime dtm = Convert.ToDateTime("30.11.2011 0:00:00");




            var res = (from d in db.RouteDetail
                       from m in db.RouteDetail

                       lalala
                       where (d.Station == a1
                       &&
                       m.Station == b1)
                     lalalal
                       }).ToList();

            return View(res);
        }

2 个答案:

答案 0 :(得分:3)

我接近这个的方法是重构我的模型以分别包含两个现有输入。这样每个人都可以在行动中相应地受到约束。

public class RailwayRoute
{
     public string StartStation { get; set; }
     public string EndStation { get; set; }
}

查看

<% using (Html.BeginForm("ViewRes", "Shedule"))
   {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
    <legend>Поиск по расписанию:</legend>
    <ul>
    <li>Из<%= Html.EditorFor(model => model.StartStation) %></li>
    <li>В<%= Html.EditorFor(model => model.EndStation) %></li>
    <li>Дата отправления</li>
    </ul>
    <p>
        <input type="submit" value="OK" />
    </p>
</fieldset>
<% } %>

控制器/动作

[HttpPost]
public ActionResult ViewRes(string startStation, string endStation)
{
     ...
}

答案 1 :(得分:0)

扩展tvanfosson的答案,我总结一下,我会尝试将您的数据模型与您的视图数据分离。这通常通过使用MVVMC aproach来完成,其中VM代表视图模型。在您的情况下,您似乎直接将数据模型传递给视图,这有时不是推荐的方法。

因此,将tvanfosson的RailwayRoute更改为viewModel对象,我将确保控制器操作适当地映射数据。像

这样的东西
[HttpPost]
public ActionResult ViewRes(RailwayRouteViewModel viewModel)
{

   DateTime dtm = Convert.ToDateTime("30.11.2011 0:00:00");


   var res = (from d in db.RouteDetail
              from m in db.RouteDetail
              lalala
              where (d.Station == viewModel.StartStation
                     &&
                     m.Station == viewModel.EndStation)
              lalalal
              select new RailywayRouteViewModel()
              {
                StartStation = d.Station,
                EndStation = m.Station
              }
          }).ToList();

   return View(res);

}