Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 3中的链接控制器行为_C#_Asp.net Mvc 3 - Fatal编程技术网

C# MVC 3中的链接控制器行为

C# MVC 3中的链接控制器行为,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,是否可以从一个控制器显示一个视图,然后根据用户在dropDownList中选择的内容,将另一个不同的视图渲染回原始调用控制器?一种菊花链效应 这背后的想法-是用户选择一种车辆类型-与视图中的ID号关联,回到控制器中取决于选择的内容,将呈现另一个视图,根据他们选择的车辆类型立即显示HTML,例如汽车、船只或飞机等的HTML页面 如果可能的话,有人能告诉我一个密码吗 实际的数据库模型如下-但它是为文件,而不是车辆 检查动作方法的方法paremetares,并返回基于该方法的不同视图。像这样的 pub

是否可以从一个控制器显示一个视图,然后根据用户在dropDownList中选择的内容,将另一个不同的视图渲染回原始调用控制器?一种菊花链效应

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

如果可能的话,有人能告诉我一个密码吗

实际的数据库模型如下-但它是为文件,而不是车辆


检查动作方法的方法paremetares,并返回基于该方法的不同视图。像这样的

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);

}
编辑:这么说,我真的认为你应该把它们放在两个不同的动作方法中。这使您的代码更干净,可读性更好。如果需要操作方法id,您可以将通用功能移动到函数并调用。所以我会这样做

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

public class VehicleTypesViewModel
{
  //other relevant properties
  public IEnumerable Types { set;get;}
  public int SelectedTypeId { set;get;}
}
此操作结果将处理您获取初始视图的请求。它获取所有车辆类型,并将其返回到ViewModels types属性中的视图

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" />

}
或者,您可以使用重定向操作方法对特定车辆执行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>

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

public ActionResult GetVehicalInfo(string id, string vehicleType)
{
    var vehicle = GetVehicleType(id, vehicleTypId);
    return PartialView("vehicle);      
}

是否要在整个页面中显示新视图?还是一页的一部分?或者是一个模型对话框?我认为不显示页面刷新会很好-但也许一个新的页面有意义,不确定,肯定不是一个对话框。但我需要将从车辆页面创建的id转存,因为这将在下一页用作外键。我添加了一个asnwer。你能给我们看看你的模型吗?我想你应该把它放在两个单独的动作方法中。这使您的代码更干净,可读性更好。
public ActionResult GetVehicalInfo(string id, string vehicleType)
{
    var vehicle = GetVehicleType(id, vehicleTypId);
    return PartialView("vehicle);      
}