MVC:传递参数来查看?

时间:2011-01-27 13:25:40

标签: c# asp.net-mvc visual-studio-2010

MVC新手问题:

我正在选择go/{mainnav}/{subnav}形式的网址,我已成功将其转到GoController类,方法:

public ActionResult Index(string mainnav, string subnav) {
  return View();
}

到目前为止,这么好。但是现在我希望视图返回不同的HTML,具体取决于mainnav或subnav的值。具体来说,在javascript块中,我想要包含以下行:

myobj.mainnav = [value of mainnav parameter];

仅当subnav不为null或为空时

myobj.subnav = [value of subnav parameter];

如何将这些参数传递给没有代码隐藏的aspx页面?

5 个答案:

答案 0 :(得分:31)

您使用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 %>;

但是,我建议您阅读unobtrusive javascript并查看是否可以改进设计以避免此特定问题。

答案 1 :(得分:3)

如果您使用MVC3,我建议将值传递到ViewBag

ViewBag.MainNav = "xxxx";
ViewBag.SubNav = null;

然后在您的视图页面上定义JavaScript并添加值。

如果您使用ViewData["MainNav"]时没有MVC 3,则存储您的值具有相同的效果。

答案 2 :(得分:2)

您是否尝试在视图中访问Request中的参数?

Request.Params["mainnav"]

Request.Params["subnav"]

适用于MVC

答案 3 :(得分:1)

我正在使用以下方法:

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>

答案 4 :(得分:0)

如果我理解这可以是一个解决方案:

public ActionResult Index(string mainnav, string subnav)
{
   return View(mainnav | subnav);
}

在Html视图中,您可以使用View 之后

<%=Model %>