在HomeController.cs
代码:
if (User.Identity.IsAuthenticated)
{
var profile = Profile.GetProfile(User.Identity.Name);
ViewData["Message"] = "Welcome " + profile.FirstName + "!";
}
else
{
ViewData["Message"] = "Welcome to myblog.";
ViewData["RegisterLink"] = "please register <%:Html.ActionLink('Register', 'Register', 'Account')%>.";
}
如果用户未登录,则必须显示 欢迎来到myblog,请注册(必须是actionlink)
和内容代码中的index.aspx是:
<%: ViewData["RegisterLink"] %>
但是我无法生成ActionLink,请帮助。
答案 0 :(得分:4)
有许多不同的方法可以解决您想要的问题,我更喜欢强类型视图方法,但您可以尝试以下方法:
ViewData["RegisterLink"] = "true";
然后在View中,如果RegisterLink
为真,则显示ActionLink()。
答案 1 :(得分:3)
这是如何从代码
生成锚TagBuilder linkBuilder = new TagBuilder("a");
linkBuilder.MergeAttribute("href", Url.Action("Register", "Account"));
linkBuilder.SetInnerText("Please Register");
ViewData["RegisterLink"] = linkBuilder.ToString();
答案 2 :(得分:3)
我想避免使用ViewData并使用强类型的ViewModel来处理它。
我的ViewModel将是这样的
public class LoggedInUserViewModel :
{
public bool IsValid { set;get;}
public string DisplayName { set;get;}
}
在控制器中,检查用户是否已通过身份验证,并设置ViewModel对象的属性并将ViewModel对象传递给View
LoggedInUserViewModel objVM=new LoggedInUserViewModel();
if (User.Identity.IsAuthenticated)
{
objVM.IsValid=true;
objVm.DisplayName="Name from your user entity"
}
return View(objVm);
并在视图中
@if(Model.IsValid)
{
@Html.ActionLink("Register", "Register", "Users")
}
else
{
Welcome @Model.DisplayName
@Html.ActionLink("Profile", "Profile", "Users")
}