在c# MVC应用程序中,可以从未更改的控件中提交来自网页的变量
本文关键字:控件 变量 提交 网页 应用程序 MVC | 更新日期: 2023-09-27 18:11:26
我有一个c# MVC应用程序和<form>
在我的page.cshtml
文件。在这个形式中,我有<input type="text" ... />
个元素。如果我提交这个表单,我只从我手动更改值的输入(即输入文本框然后键入一些东西)中获得Response.Params
或Response.Form
中的值。
如果我用jQuery改变值,$('#myInput').val('some value');
这并不算作输入值的变化,当我提交表单时,我没有得到myInput
的值。
是否有办法确保所有输入都被提交?如果没有,那么是否有一个很好的解决方案,也许在某些事件发生之前,我的模型被绑定?我需要知道提交时表单的所有输入值是否更改。
一些附加信息:
表单和其他值被正确提交,当POST动作在我的控制器中被调用时,我正在接收我的模型。
真正的问题是当我的模型被绑定时。它正在被创建并与所有值绑定,除了没有提交的值,因为它不在Request.Params
集合中。
我只在字段被禁用时看到过这种行为。因此,我通常有一个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) {
}