【问题标题】:How to use query string in asp.net mvc layout page如何在 asp.net mvc 布局页面中使用查询字符串
【发布时间】:2014-05-08 11:14:31
【问题描述】:

我在理解 asp.net mvc 中的查询字符串和路由概念时感到困惑,如果有人能提供帮助,我将不胜感激。

我的问题是:

我有一个登录页面,用户将在其中输入用户名、密码和 ID。成功登录后,我喜欢获取 ID 并将其传递到我的个人资料页面。现在个人资料页面与其他两个链接一起成为布局页面的一部分。

 <nav class="main">               
            <ul class="menu" >
                <li>@Html.ActionLink("Profile", MVC.Profile.Index(), new { Id = Request.QueryString["Id"].ToString() })</li>
                <li>@Html.ActionLink("Configuration", MVC.Configuration.Index(),new { Id = Request.QueryString["Id"].ToString() })</li>
                <li>@Html.ActionLink("Transaction", MVC.Transaction.Index(), new { Id = Request.QueryString["Id"].ToString() })</li>
            </ul>            
        </nav> 

在我的登录页面中,我使用以下代码将用户重定向到个人资料页面。

return RedirectToAction("Index", "Profile", new { Id = viewModel.Id });

现在我怎样才能将相同的值传递给配置和交易页面,它们只是布局页面上的操作链接。我想像下面这样使用 Request.QueryString:

new { Id = Request.QueryString["Id"].ToString()

但这是抛出对象引用异常。

我的路由如下所示:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional });

提前致谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    因此,在您重定向到 Profile 控制器的 Index 操作后,请确保您的操作采用如下 int 参数并将其返回到 Profile 视图:

    public ActionResult Index(int id)
    {
       return View(id);
    }
    

    在个人资料的Index 视图中呈现您的链接,如下所示:

    @model int
    
     <nav class="main">               
                <ul class="menu" >
                    <li>@Html.ActionLink("Profile", "Index", new { Id = @Model })</li>
                    <li>@Html.ActionLink("Configuration", "Index",new { Id = @Model })</li>
                    <li>@Html.ActionLink("Transaction", "Index", new { Id = @Model })</li>
                </ul>    
        </nav> 
    

    如果您需要更多说明,请告诉我。

    【讨论】:

    • 您好,谢谢,是的,我的配置文件控制器将 id 作为参数。但这些操作链接是布局页面的一部分。您是否建议我从布局页面中删除这些链接并将其放在每个单独的页面中?
    • @Vin05 不。您可以在您的布局页面中执行我在上面所做的相同操作,并且效果相同。您的Model 将填充您从控制器View(id) 发送的任何数据。
    • @Vin05 我在这里上传了一个示例应用程序:sendspace.com/file/crarpc
    • 您好,非常感谢您上传解决方案,但我还有一个疑问,因为您正在从 ProfileController 传递 View(id),我已经从 Profile Controller 传递了我的 ViewModel。我不能传递另一个 int 值吗?
    • 没有。您的模型只能是一种类型。我使用int 让事情变得简单。所以,你可以在你的 ViewModel 中包装任何你喜欢的东西,你可以在你的 View 中选择它,例如@Model.Id.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多