将隐藏文本字段附加到MVC表单

7
这可能是一个很愚蠢的问题,但基本上我有一个“表单”在模型中,它作为表单附加到我的视图,但我无法从视图中将任何数据传递给它。 它只有两个属性:一个Id属性和一个字符串属性。 我一直在尝试使用页面上隐藏的文本框中的文本填充字符串属性,但没有成功。
表单代码:
    public class AllocateListForm
{
    public int Id { get; set; }

    public virtual string HiddenText { get; set; }
}

相关的视图代码:

  <% using (Html.BeginForm("SaveExit", "User", new { }, FormMethod.Post, new { id = "selectExitPoints" }))  { %>
    <fieldset>
            <input type="hidden" id="HiddenText" />
    </fieldset>
  <% } %>

幕后有jQuery填充 HiddenText 文本,我可以向您保证它正在填充。还有幕后的jQuery执行Ajax提交,我可以向您保证该代码在应用程序的其他地方使用时没有问题。当我执行将表单提交到服务器的操作并转到指向此操作的控制器代码时,我设置了断点,以便可以进入控制台并检查表单上的HiddenText字段是否具有任何数据。但是它是null。请问有人能指导我吗?
2个回答

10

如果您将输入的名称指定为“HiddenText”,模型绑定器应该会接收到它。我假设您的控制器操作接受一个AllocateListForm作为参数。

<input type="hidden" name="HiddenText" id="HiddenText" />

你也可以这样使用Html Helpers:

@Html.HiddenFor(model => model.HiddenText, new { id = "HiddenText" })

编辑:将AllocateListForm作为主模型的一个属性添加,然后更改辅助程序为@Html.HiddenFor(model => model.MyAllocateListForm.HiddenText)


你的假设是正确的。它是 public JsonResult SaveExit(AllocateListForm exitListForm),所以在控制台中我正在检查 ? exitListForm.HiddenText。但是,由于我的模型没有 HiddenText 属性,只有表单才有,因此我无法使用 HTML 帮助程序。 - Jfabs
@Jared 你的视图是否强类型到不同的模型?听起来你应该创建一个视图模型,以便更轻松地访问表单属性。 - Mansfield
因此,将AllocateListForm作为主模型的属性添加,然后更改助手为@Html.HiddenFor(model => model.MyAllocateListForm.HiddenText) - Mansfield
我想是这样(抱歉,我以为你在使用Razor,这是我的糊涂)。 - Mansfield
完全不是这样,我非常确定它仍然是相同的,因为如果我没有正确输入 x.Form.HiddenText(即 x.Form.HidddddenText)以匹配正确的路径和属性名称,那么该行会出现编译错误。所以谢谢你! - Jfabs
显示剩余2条评论

4

如果你想用Razor的方式来完成,那么这应该可以满足你的需求。

@Html.HiddenFor(model => model.HiddenText);

我无法使用HTML助手,因为我的模型没有隐藏文本字段,只有表单有。 - Jfabs
如果我要写'@Html.HiddenFor(model => model.RegUserID, new { id = "HiddenText" })',我该如何设置model.RegUserID的值? - Spionred

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接