Подтвердить что ты не робот

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, у которой нет кода?

4b9b3361

Ответ 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 %>