如何从Mvc中的代码生成ActionLink?

时间:2012-01-13 15:19:06

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

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,请帮助。

3 个答案:

答案 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")
 }