ASP.NET MVC Controller未使用ModelView将正确的值传递给PartialView

时间:2013-12-05 11:34:20

标签: asp.net-mvc

我正在尝试创建CustomMembershipProvider。当用户点击登录信息时,我想显示“welcome UserName !”在Shared / _layout .cshtml

中包含的PartialView内部

这是控制器类:

    [ChildActionOnly]
    public ActionResult WelcomeMessage()
    {
        var userName = this.HttpContext.Session["LoggedInUser"];
        WelcomeViewModel wView = new WelcomeViewModel();

        if (userName != null)
        {
            User user = this.db.Users.FirstOrDefault(x => x.UserName == userName);
            wView.userId = user.Id;
            wView.Message = user.UserName;

        }
        return PartialView(wView);
    }

以下是PartialView代码:

    @model MvcApplication1.ViewModels.WelcomeViewModel
    @Html.ActionLink("Welcome " + Model.Message + "!", "Edit", "Account",  new { id = Model.userId })

我让视图正确呈现,但是当我点击超链接时,我收到以下错误:

参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'MvcApplication1.Controllers.AccountController'中方法'System.Web.Mvc.ViewResult Details(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。

似乎使用id = null调用编辑操作,但是,用户名正确显示。我最初使用ViewBag并根据SO解决方案here切换到ViewModel。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

试试这个

@Html.ActionLink("Welcome " + Model.Message + "!", "Edit", "Account", new { id = Model.userId }, null)

问题是您设置了ActionLink方法的htmlAttributes参数。

答案 1 :(得分:1)

您遇到错误的@Html.ActionLink Html.ActionLink("Welcome " + Model.Message + "!", // Display text "Edit", // ActionMethod "Acount", // Controller Name. new { Model.Id }, // Route arguments. null // htmlArguments ) ,您需要overload

htmlAttributes

基本上,您需要传递null参数以达到正确的重载,如果您不需要设置任何参数,则可以将其作为{{1}}传递。

答案 2 :(得分:1)

好吧,你似乎正在使用错误的重载,请试一试:

@Html.ActionLink("Welcome " + Model.Message + "!", "Edit", "Account", 
   new { id = Model.userId }, 
   null)