2012-05-14 2 views
0

Возможно ли, чтобы контроллер отображал представление, а затем зависел от того, что этот пользователь выбирает в dropDownList, - отображает другой внешний вид в исходном вызывающем контроллере? Вид эффекта «ромашки».Связь поведения контроллера в MVC 3

Подразумевается, что пользователь выбирает тип транспортного средства - (связанный с идентификационным номером) в представлении, обратно в контроллер, в зависимости от того, что было выбрано, будет отображать другое представление, сразу отображающее HTML в соответствии с типом транспортного средства, которое они выбрал, например HTML-страницу для автомобиля или лодки или самолета и т. д.

Если это возможно, кто-то может указать мне на экзамен по коду?

Настоящая модель базы данных ниже - но это для документов, а не для транспортных средств!

enter image description here

+0

Вы хотите показать новый обзор на всей странице? или часть страницы? или диалоговое окно модели? – Shyju

+0

Я думаю, было бы неплохо не показывать обновление страницы - но, возможно, новая страница имеет смысл, а не уверен ???, definitley не диалог.Но мне нужно перенести идентификатор, созданный на странице Vehicle, так как это используется как ключ foriegn на следующей странице. – Vidar

+0

Я добавил asnwer. Можете ли вы показать нам свою модель – Shyju

ответ

2

проверить метод paremetares вашего метода действия и возвращать разные взгляды baed на этом. Что-то вроде этого.

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

} 

EDIT: Говоря так, я серьезно думаю, что вы должны держать эти в 2 отдельных методов действий. Это делает ваш код чистым и читаемым. Вы можете перенести общую функциональность на функцию и вызвать, если из bothe нужны методы id. Так что я хотел бы сделать это таким образом

Предполагая, что у вас есть ViewModel для первой страницы (отображает все vehicletypes)

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

Ваш запрос GET для исходного вида будут обрабатываться этим действием result.It получает всех типов транспортных средств и вернуть их в свой вид в свойстве ViewModels Types.

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

и в вашем View называется VehicleTypes.cshtml,

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

} 

Другим способом действий для обработки формы поста. У вас есть выбранный идентификатор типа здесь, и вы можете получить конкретные детали здесь и возвращают другой вид

[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. Я бы предпочел этот подход, поскольку он придерживается шаблона 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> 
0

Я думаю, чтобы получить лучший пользовательский опыт создания partial view и загрузить частичный вид в div в одной и той же страницы с помощью Ajax вызова.

public ActionResult GetVehicalInfo(string id, string vehicleType) 
{ 
    var vehicle = GetVehicleType(id, vehicleTypId); 
    return PartialView("vehicle);  
} 
Смежные вопросы