目前我有一个可行的方法,当点击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)
答案 0 :(得分:12)
尝试avoid ViewData
和ViewBag
。尝试使用强类型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能够为我们做魔术=)
希望这有帮助。
此致