在c# MVC应用程序中,可以从未更改的控件中提交来自网页的变量

本文关键字:控件 变量 提交 网页 应用程序 MVC | 更新日期: 2023-09-27 18:11:26

我有一个c# MVC应用程序和<form>在我的page.cshtml文件。在这个形式中,我有<input type="text" ... />个元素。如果我提交这个表单,我只从我手动更改值的输入(即输入文本框然后键入一些东西)中获得Response.ParamsResponse.Form中的值。

如果我用jQuery改变值,$('#myInput').val('some value');这并不算作输入值的变化,当我提交表单时,我没有得到myInput的值。

是否有办法确保所有输入都被提交?如果没有,那么是否有一个很好的解决方案,也许在某些事件发生之前,我的模型被绑定?我需要知道提交时表单的所有输入值是否更改。

一些附加信息:

表单和其他值被正确提交,当POST动作在我的控制器中被调用时,我正在接收我的模型。

真正的问题是当我的模型被绑定时。它正在被创建并与所有值绑定,除了没有提交的值,因为它不在Request.Params集合中。

在c# MVC应用程序中,可以从未更改的控件中提交来自网页的变量

我只在字段被禁用时看到过这种行为。因此,我通常有一个javascript函数来处理表单提交,并在提交时重新启用它们,这样就可以将正确的值发送到服务器。

像这样的东西对我来说很有用(注意:我使用的是JQuery):

$(document).ready() {
    $("#ButtonSubmit").click(SubmitForm);
}
function SubmitForm(e) {
    e.preventDefault();
    //ensure fields are enabled, this example does text and checkbox types
    $("[type='text']").attr("disabled", false);
    $("[type='checkbox']").attr("disabled", false);
    //submit the form
    document.forms[0].submit();
}

我不知道有什么更简单的方法可以做到这一点,如果你能"标记"一些指示所有字段提交的东西,那就太好了。但我不知道这是否存在,也许其他人可以提供更好的解决方案。

EDIT:看来禁用字段不提交只是HTML的本质,而不是与MVC绑定的东西。


看起来,如果你使字段readonly而不是disabled,那么值仍然会提交。然而,使用这种方法,你失去了"禁用"样式。这个规则的例外是select控制,似乎这也不会在readonly下提交。更多信息可以在这个问题

尝试使用razor帮助器来构建表单标签。

@using (Html.BeginForm ()) {. .

// make sure this is a submit button
<input type="submit" value="Save" />

}

在你的控制器动作post方法中,确保你修饰了它[HttpPost]。例如,

[HttpPost]public ActionResult Edit(YourModel model) {

}