我正在尝试创建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。 提前谢谢。
答案 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)