ASP.NET MVC自带ResetPassword功能如何获取链接携带的code参数?
原理说明
model.Code的填充依赖ASP.NET MVC内置的两个机制完成,整个流程如下:
- GET请求阶段参数自动存入ViewData
虽然你在GET的ResetPassword方法里没有显式把code参数传递给视图,但ASP.NET MVC默认会把Action方法的所有参数自动添加到ViewData字典中,键名和参数名保持一致,也就是这里会生成ViewData["Code"] = code。 - HiddenFor辅助方法自动取值
视图中用到了@Html.HiddenFor(model => model.Code)这个强类型HTML辅助方法,它的取值优先级顺序是:
ModelState字典 > ViewData字典 > 视图Model实例的对应属性
就算你没有给视图传入实例化的ResetPasswordViewModel,只要ViewData里存在Code键,这个方法就会自动把对应的值填充到隐藏输入框的value属性中,渲染出来的HTML类似:
<input type="hidden" name="Code" value="你链接里带的code值" />
- POST提交阶段模型绑定填充
用户提交表单时,隐藏输入框里的Code值会随其他表单字段一起提交到POST接口,ASP.NET MVC的模型绑定会自动把这个值映射到ResetPasswordViewModel的Code属性上,最终完成参数传递。
如果你想要代码逻辑更直观,也可以把GET方法改写成显式传参的形式,效果完全一致:
[AllowAnonymous] public ActionResult ResetPassword(string code) { return code == null ? View("Error") : View(new ResetPasswordViewModel { Code = code }); }
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

