6

目前我有一个有效的方法,当单击此处的 Razor 中的代码链接时,它正在工作:

@Html.ActionLink("New User ,Register", "Register", new { OpenID = Model.OpenID })

我希望从控制器返回视图具有相同的效果,目前我正在使用此代码但没有成功

return View("Register", lm);

我在 MVC 很新,所以我有点困惑。与我的最后一个代码miss smt返回的视图和我支持的部分有关new { OpenID = Model.OpenID }

你能指出我正确的方向吗?

这就是我的控制器的方法:

public ActionResult Register(string OpenID)
4

3 回答 3

15

尽量避免 ViewDataViewBag。尝试使用强类型ViewModels。这使您的代码干净(以及下一个将维护您的代码的开发人员,HAPPY

有一个属性OpenID在你的ViewModel

public class RegisterViewModel
{
     //Other Properties also
     public string OpenID { set; get; }
}

现在您可以在返回视图时在您的action方法中设置此值:

public ActionResult Register(string OpenId)
{
     var vm = new RegisterViewModel();
     vm.OpenID = OpenId;
     return View(vm);
}
于 2012-07-13T18:43:26.350 回答
6

您可以将所需的任何数据添加到 ViewBag 变量中。

在您的控制器中,您可以这样设置值。

控制器

public ActionResult Register()
{
    ViewBag.OpenID = OpenID;

    return View()
}

在您的剃刀视图中,您可以以相同的方式访问它

MVC3 剃刀视图

@ViewBag.OpenID
于 2012-07-13T18:34:02.600 回答
4

请看一下这个视图(ViewA):

<div>
    @Html.ActionLink("My link", "ViewB", new { someData = "some data I'm passing on" })
</div>

而这两个动作:

    public ActionResult ViewA()
    {
        return View();
    }

    public ActionResult ViewB(string someData)
    {
        //Here someData has the value "some data I'm passing on"
        return View();
    }

我们只是通过 get (即查询字符串)传递值。通过匹配名称,MVC 能够为我们创造奇迹 =)

希望这可以帮助。

问候

于 2012-07-13T18:53:17.893 回答