MVC: передать параметр для просмотра?
Вопрос о MVC:
Я собираю URL-адрес формы go/{mainnav}/{subnav}
, которую я успешно перенаправил в класс GoController
, метод:
public ActionResult Index(string mainnav, string subnav) {
return View();
}
До сих пор так хорошо. Но теперь я хочу, чтобы представление возвращало разные HTML, в зависимости от значений mainnav или subnav. В частности, внутри блока javascript я хочу включить строку:
myobj.mainnav = [value of mainnav parameter];
и, только если subnav не является нулевым или пустым:
myobj.subnav = [value of subnav parameter];
Как передать эти параметры на страницу aspx, у которой нет кода?
Ответы
Ответ 1
Для передачи данных используется класс ViewModel
:
public class IndexViewModel
{
public string MainNav { get; set; }
public string SubNav { get; set; }
public IndexViewModel(string mainnav, string subnav)
{
this.MainNav = mainnav;
this.SubNav = subnav;
}
}
Затем ваш метод действия выходит
public ActionResult Index(string mainnav, string subnav)
{
return View(new IndexViewModel(mainnav, subnav));
}
Это означает, что ваш вид должен быть строго типизирован:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<YourNameSpace.IndexViewModel>" %>
По вашему мнению, вы выводите данные следующим образом:
myobj.mainnav = <%: Model.MainNav %>;
Альтернативное решение, если вы используете MVC3, должно было бы использовать динамический ViewBag
:
public ActionResult Index(string mainnav, string subnav)
{
ViewBag.MainNav = mainnav;
ViewBag.SubNav = subnav;
return View();
}
который будет доступен на странице так:
myobj.mainnav = <%: ViewBag.MainNav %>;
Однако я бы рекомендовал вам прочитать ненавязчивый javascript и посмотреть, можете ли вы улучшить свой дизайн, чтобы избежать этой конкретной проблемы.
Ответ 2
Если вы используете MVC3, я бы предложил передать значения в ViewBag
.
ViewBag.MainNav = "xxxx";
ViewBag.SubNav = null;
а затем на странице просмотра, где вы определяете JavaScript и добавляете значение.
если у вас нет MVC 3, если вы используете ViewData["MainNav"]
), для сохранения вашего значения имеет тот же эффект.
Ответ 3
Вы пытались получить доступ к параметрам из запроса в своем представлении?
то есть.
Request.Params["mainnav"]
или
Request.Params["subnav"]
Работает в MVC
Ответ 4
Я использую следующий подход:
ViewModel.class:
public class TitleBodyModel
{
public string Title { get; set; }
public string Body { get; set; }
public TitleBodyModel() { Title = Body = ""; }
public TitleBodyModel(string t, string b) { this.Title = t; this.Body = b; }
}
В главном представлении:
@Html.Partial("_TitleBody" , new XXX.Models.TitleBodyModel("title", "body" ))
Затем в частичном виде:
@model XXX.Models.TitleBodyModel
<div class="bl_item">
<div class="bl_title">@Model.Title</div>
<div class="bl_body">@Model.Body</div>
</div>
Ответ 5
Если я понимаю, это может быть решение:
public ActionResult Index(string mainnav, string subnav)
{
return View(mainnav | subnav);
}
В Html View вы можете использовать View
и после
<%=Model %>