当我的_Layout.cshtml页面上的某个链接被点击时,提示会询问一个值。我将此值存储在同一视图中的隐藏字段中。在我加载Recommended.cshtml之前,我想看看隐藏字段值是否与我创建的常量值匹配。一切正常,除了我无法弄清楚如何将隐藏的值放入要加载的视图中。我可以在_Layout.cshtml上使用[HttpPost] ActionResult
吗?在这种情况下最佳做法是什么?
型号:
[Bind]
public class RecommendedModel
{
[StringLength(50), Required(ErrorMessage = "This field is required.")]
public string Password { get; set; }
private const string _TOKEN = "pass";
public string Token { get { return _TOKEN; } }
}
控制器:
public ActionResult Recommended(RecommendedModel _recommendedModel)
{
if (_recommendedModel.Password == _recommendedModel.Token)
{
ViewBag.Message = "Recommended.";
return View();
}
else
{
return View("Error");
}
}
查看(隐藏字段实际上位于我的共享_Layout页面上):
@Html.HiddenFor(m=>m.Password)
JavaScript的:
var password = prompt("What is the password?", "");
document.getElementById("Password").value = password;
编辑:除了_recommendedModel.Password
之外,所有这些代码都有效。它应该包含用户在提示中输入的字符串,除非我没有正确映射它。
答案 0 :(得分:0)
在你的控制器中,更改ActionResult方法以接收隐藏字段作为参数,如下所示:
public ActionResult Recommended(RecommendedModel _recommendedModel, string password)
然后,设置一个ViewBag变量,例如,使用该参数值并将其放在" next"图。
ViewBag.password = password;
请记住,您的隐藏字段必须位于表单元素内才能传递给控制器。
修改强>
@using (Html.BeginForm("ControllerName", "Recommended")) {
@Html.HiddenFor(m => m.Password)
<input name="Save" type="submit" value="Save" />
}
答案 1 :(得分:0)
您的密码字段应位于代码内。如果它在表单标签之外,请确保使用javascript / jquery将该值从该字段传递给控制器