c# - MVC : pass parameter to view?

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

MVC新手问题:

我正在获取一个形式为 go/{mainnav}/{subnav} 的 URL,我已成功将其路由到 GoController 类,方法:

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

到目前为止,还不错。但现在我希望 View 根据 mainnav 或 subnav 的值返回不同的 HTML。具体来说,在一个 javascript block 中,我想包含以下行:

myobj.mainnav = [value of mainnav parameter];

并且,仅当 subnav 不为 null 或为空时:

myobj.subnav = [value of subnav parameter];

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

最佳答案

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

你的action方法就出来了

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

这意味着您的 View 必须是强类型的:

<%@ 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看看您是否可以改进您的设计来避免这个特定问题。

关于c# - MVC : pass parameter to view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816869/

相关文章:

c# - 通过表单 POST 发送 Base64 数据图像

asp.net-mvc - 带有构造函数注入(inject)和 MEF 的 Asp.net MVC 基本 Controller

c# - 排序、过滤和分页 MVC

visual-studio-2010 - 是否有具有可视分支的 Team Foundation Server GUI 客户端?

c - 具有浮点输入和输出值的简单 C 代码的奇怪行为

c# - 如何知道站点在哪个ApplicationPools中

c# - 播放未知时间的正弦波

c# - 在本地保存 Visual Studio 的配置管理器设置

c# - MVC4 使用什么加密?

c# - 将用户控件添加到窗口时,如何在 xaml 中编辑用户控件的子控件模板?