将隐藏字段从当前MVC视图发送到要加载的MVC视图

时间:2014-09-17 10:21:50

标签: asp.net-mvc asp.net-mvc-4 hidden-field

当我的_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之外,所有这些代码都有效。它应该包含用户在提示中输入的字符串,除非我没有正确映射它。

2 个答案:

答案 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将该值从该字段传递给控制器​​