MVC如何使用参数返回视图

时间:2012-07-13 18:31:22

标签: c# asp.net-mvc razor

目前我有一个可行的方法,当点击Razor中的代码链接时,它正在工作:

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

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

return View("Register", lm);

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

相关联

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

这是我控制器的方法:

public ActionResult Register(string OpenID)

3 个答案:

答案 0 :(得分:12)

尝试avoid 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);
}

答案 1 :(得分:5)

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

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

<强>控制器

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

    return View()
}

在你的剃须刀视图中,你可以用同样的方式访问它

MVC3 Razor View

@ViewBag.OpenID

答案 2 :(得分: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能够为我们做魔术=)

希望这有帮助。

此致