C# mvc在一个页面中使用多个表单,通过选择单选按钮进行过滤

C# mvc在一个页面中使用多个表单,通过选择单选按钮进行过滤,c#,asp.net-mvc,radiobuttonlist,C#,Asp.net Mvc,Radiobuttonlist,我有一个包含3个表单的页面,每个表单的显示取决于上一个表单中单选按钮的选定值(我使用viewbag控制可见性,希望找到更好的)所有这些表单都使用相同的视图模型。是否可以将这3个表单发布到同一个操作,并使视图模型保存所有选定的值,以便发送到另一个页面,甚至存储在数据库中?我尝试这样做,在每次发布之后,旧的选定值在ViewModel中变为null。 我还尝试了发布的解决方案,但仍然无法在ViewModel中保存所有选定值,因此,存储选定值以供以后使用的最佳方法是什么 RouteList.cs我的视图

我有一个包含3个表单的页面,每个表单的显示取决于上一个表单中单选按钮的选定值(我使用viewbag控制可见性,希望找到更好的)所有这些表单都使用相同的视图模型。是否可以将这3个表单发布到同一个操作,并使视图模型保存所有选定的值,以便发送到另一个页面,甚至存储在数据库中?我尝试这样做,在每次发布之后,旧的选定值在ViewModel中变为null。 我还尝试了发布的解决方案,但仍然无法在ViewModel中保存所有选定值,因此,存储选定值以供以后使用的最佳方法是什么

RouteList.cs我的视图模型

    public class RoutesList
{
    public int ID { get; set; }
    public List<Route> Routes
    {
        get
        {
            Queries.BookingHandler handler = new Queries.BookingHandler();
            return handler.GetAllRoutes();
        }
        set { }
    }
    public List<Route> OppositeRoutes
    {
        get
        {
                Queries.BookingHandler handler = new Queries.BookingHandler();
                return handler.GetRoutDirections(long.Parse(SelectedRouteID));

        }
        set { }
    }
    public List<RouteStation> RouteStations
    {
        get
        {
                Queries.BookingHandler handler = new Queries.BookingHandler();
                return handler.GetRouteStations(long.Parse(SelectedOppositeRouteID));
        }
        set { }
    }
        public string SelectedRouteID { get; set; }
    public string SelectedOppositeRouteID { get; set; }
    public string SelectedFromStationID { get; set; }
    public string SelectedToStationID { get; set; }
    public int Count { get; set; }
}
和my View Index.cshtml

@model BusStarBackend.Models.RoutesList
    @using (Html.BeginForm())
    {
        <table class="table table-hover">
            <tr>
                <th>Trips</th>
                <th>Price</th>
            </tr>
            @foreach (var item in Model.Routes)
            {
                <tr>
                    <td>
                        @Html.RadioButtonFor(m => m.SelectedRouteID, item.RouteID)
                        @Html.DisplayFor(model => item.RouteName)
                    </td>
                    <td>@Html.DisplayFor(m => item.TicketPrice)</td>
                    <td> </td>
                </tr>
            }
        </table>
        <input type="submit" value="next" class="btn btn-default" />
    }
@{
    using (Html.BeginForm())
    {
        if (ViewBag.isDirection != null && ViewBag.isDirection)
        {
            <table class="table">
                <tr>
                    <th>
                        Please selected your Direction
                    </th>
                    <th></th>
                </tr>

                @foreach (var item in Model.OppositeRoutes)
                {
                    <tr>
                        <td>
                            @Html.RadioButtonFor(m => Model.SelectedOppositeRouteID, item.RouteID)
                            @Html.DisplayFor(modelItem => item.RouteName)
                        </td>
                    </tr>
                }
            </table>
            <input type="submit" value="next" class="btn btn-default" />
        }
    }
}
@{
    if (ViewBag.isStations != null && ViewBag.isStations)

    {
        using (Html.BeginForm())
        {
            <div id="stations">

                <table class="table">
                    <tr>
                        <th>
                            From Station
                        </th>
                        <th>
                            To Station
                        </th>
                        <th></th>
                    </tr>

                    @foreach (var item in Model.RouteStations)
                    {
                        <tr>
                            <td>
                                @Html.RadioButtonFor(model => model.SelectedFromStationID, item.StationID)
                                @Html.DisplayFor(modelItem => item.Station.Name)
                            </td>
                            <td>
                                @Html.RadioButtonFor(model => model.SelectedToStationID, item.StationID)
                                @Html.DisplayFor(modelItem => item.Station.Name)
                            </td>
                        </tr>
                    }
                </table>
                <input type="submit" value="next" class="btn btn-default" />
            </div>
        }
    }
}
@model bustarbackend.Models.RoutesList
@使用(Html.BeginForm())
{
旅行
价格
@foreach(Model.Routes中的变量项)
{
@Html.radioButton(m=>m.SelectedRouteID,item.RouteID)
@DisplayFor(模型=>item.RouteName)
@DisplayFor(m=>item.TicketPrice)
}
}
@{
使用(Html.BeginForm())
{
if(ViewBag.isDirection!=null&&ViewBag.isDirection)
{
请选择您的方向
@foreach(模型中的var项。反向路由)
{
@Html.radioButton(m=>Model.SelectedOppositeRouteID,item.RouteID)
@DisplayFor(modelItem=>item.RouteName)
}
}
}
}
@{
if(ViewBag.isStations!=null&&ViewBag.isStations)
{
使用(Html.BeginForm())
{
从车站
驻扎
@foreach(Model.RouteStations中的var项)
{
@Html.radioButton(model=>model.SelectedFromStationID,item.StationID)
@DisplayFor(modelItem=>item.Station.Name)
@Html.radioButton(model=>model.selectedStationId,item.StationID)
@DisplayFor(modelItem=>item.Station.Name)
}
}
}
}
对于“最简单”的修复,您应该在开始表单之前使用“如果”,如下所示:

@model BusStar.Models.RoutesList
@if (ViewBag.isDirection != null && ViewBag.isDirection)
   {...
    @using (Html.BeginForm())
    {.....
为了获得更好的解决方案,您应该使用“Html.Action”方法,构建包含每个表单的局部视图,并根据单选按钮的值仅呈现所需的表单

大概是这样的:

@model BusStar.Models.RoutesList
@if (ViewBag.isDirection != null && ViewBag.isDirection)
   {...
    @using (Html.BeginForm())
    {.....
每个表单有2个部分视图-这是针对方向表单的:(称为_directionForm.cshtml)

在您以前的观点中,将这两种形式替换为:

Html.Action("PartialForm", Model)

对不起,我是mvc的初学者,你能帮助我如何根据单选按钮的值渲染我的局部视图吗?这里有很多路径可供选择,我将尝试演示一种可能更适合初学者的路径。我建议在你研究ajax的解决方案之后。我会照你说的做,但是在PartialForm中,你希望我呈现哪个其他视图?你是指其他的部分视图?如果是这样的话,我必须做另一个条件,那么在默认情况下我可以返回什么呢?您需要两个部分-一个用于方向形式,一个用于站形式,带有条件。默认情况下,应返回空-->返回新的EmptyResult();并考虑JavaScript解决方案。只需将每个表单添加到视图中,并从所需单选按钮切换所需“更改”事件的显示。
public ActionResult Index()
    {
        return View(new RoutesList());
    }

public ActionResult PartialForm(RoutesList route)
{
   if (!string.IsNullOrEmpty(route.SelectedRouteID))
   return view("__directionForm", route);

   return view("...", route); //your other view
}

[HttpPost]
      public ActionResult Index(RoutesList route, FormCollection frm)
    {

        //if (!string.IsNullOrEmpty(route.SelectedRouteID)) ViewBag.isDirection = true;
        //if (!string.IsNullOrEmpty(route.SelectedOppositeRouteID)) ViewBag.isStations = true;
        if(!string.IsNullOrEmpty(route.SelectedFromStationID)&&!string.IsNullOrEmpty(route.SelectedToStationID))
            return RedirectToAction("Index", "Time", new { id = route.SelectedRouteID });

        return View(route);

    }
Html.Action("PartialForm", Model)