0

是否可以从控制器显示一个视图,然后取决于用户在 dropDownList 中选择的内容 - 在原始调用控制器中呈现另一个不同的视图?一种“菊花链”效果。

这背后的想法 - 是用户在视图中选择车辆类型 - (与 ID 号相关联),回到控制器中,取决于所选择的内容将根据他们选择的车辆类型立即呈现另一个视图显示 HTML,例如 HTML汽车或船或飞机等的页面...

如果这是可能的,有人可以指出我的代码示例吗?

下面是实际的数据库模型——但它是用于文档,而不是车辆!

在此处输入图像描述

4

2 回答 2

2

检查您的操作方法的方法参数并返回基于此的不同视图。像这样的东西。

public ActionResult GetInfo(string id,string vehicleTypId)
{
  if(String.IsNullOrEmpty(vehicleTypeId))
  {
    var vehicle=GetVehicleType(vehicleTypId);
    return View("ShowSpecificVehicle",vehicle)    ;
  }

  var genericVehicle=GetVehicle(id);
  return View(genericVehicle);

}

编辑:这么说,我认真地认为你应该将它们保留在 2 个单独的 Action 方法中。这使您的代码更干净且更具可读性。您可以将通用功能移动到一个函数中,并在需要的操作方法 id 中调用。所以我会这样做

假设您有第一页的 ViewModel(显示所有车辆类型)

public class VehicleTypesViewModel
{
  //other relevant properties
  public IEnumerable Types { set;get;}
  public int SelectedTypeId { set;get;}
}

您对初始视图的 GET 请求将由此操作结果处理。它获取所有车辆类型并将其返回到 ViewModels 类型属性中的视图。

public ActionResult VehicleTypes()
{
  VehicleTypesViewModel objVM=new VehicleTypesViewModel();
  objVM.Types=dbContext.VehicleTypes.ToList();      
  return View(objVM);
}

在您的名为 VehicleTypes.cshtml 的视图中,

@model VehicleTypesViewModel     
@using(Html.BeginForm())
{
  @Html.DropDownListFor(Model.SelectedTypeId,new SelectList(Model.Types,"Text",Value"),"Select")
<input type="submit" value="Go" />

}

另一种处理表单发布的 Action 方法。您在此处具有选定的类型 ID,您可以在此处获取具体详细信息并返回不同的视图

[HttpPost]
public ActionResult VehicleTypes(VehicleTypesViewModel model)
{
  // you have the selected Id in model.SelectedTypeId property
  var specificVehicle=dbContext.Vehicles.Where(x=>x.TypeId=model.SelectedTypeId);
  return View("SpecificDetails",specificVehicle);

}

或者,您可以使用 RedirecToAction 方法对特定车辆执行 Get 请求。我更喜欢这种方法,因为它坚持 PRG 模式。

[HttpPost]
public ActionResult VehicleTypes(VehicleTypesViewModel model)
{
  int typeId=model.SelectedTypeId;
  return RedirectToAction("GetVehicle",new {@id=typeId});
}
public ActionResult GetVehicle(int id)
{
  var specificVehicle=dbContext.Vehicles.Where(x=>x.TypeIdid);
  return View(specificVehicle);

}

使用 Javascript:您也可以从您的 javascript 中调用新视图。没有 HTTPpost 到控制器。您应该为此在初始视图中添加一些 javascript

    @model VehicleTypesViewModel 
    //Include jQuery library reference here    
    @Html.DropDownListFor(Model.SelectedTypeId,new SelectList(Model.Types,"Text",Value"),"Select")
   <script type="text/javascript">
      $(function(){
        $("#SelectedTypeId").change(){
          window.location.href="@Url.Action("GetVehicle","Yourcontroller")"+"/"+$(this).attr("id");
        });
      });
   </script>
于 2012-05-14T15:42:16.900 回答
0

我认为为了获得更好的用户体验,创建一个,并通过 ajax 调用在同一页面partial view中加载该部分视图。div

public ActionResult GetVehicalInfo(string id, string vehicleType)
{
    var vehicle = GetVehicleType(id, vehicleTypId);
    return PartialView("vehicle);      
}
于 2012-05-14T16:13:38.750 回答