在 C# MVC 应用程序中,是不是可以在未更改的控件中从网页提交变量?
Posted
技术标签:
【中文标题】在 C# MVC 应用程序中,是不是可以在未更改的控件中从网页提交变量?【英文标题】:In a C# MVC app is it possible to submit variables from a web page in controls that did not change?在 C# MVC 应用程序中,是否可以在未更改的控件中从网页提交变量? 【发布时间】:2013-04-23 07:54:34 【问题描述】:我的page.cshtml
文件中有一个C# MVC 应用程序和一个<form>
。在那种形式中,我有 <input type="text" ... />
元素。如果我提交此表单,我只会从我手动更改值的输入中获取 Response.Params
或 Response.Form
中的值(即输入文本框然后输入一些内容)。
如果我使用 jQuery 更改值,$('#myInput').val('some value');
这不会算作输入值的更改,并且我在提交表单时没有得到 myInput
的值。
有什么方法可以确保提交所有输入?如果没有,那么是否有一个很好的解决方法,也许在我的模型绑定之前发生的某些事件?我需要知道提交时表单中的所有输入值是否更改。
一些附加信息:
表单和其他值已正确提交,当在我的控制器中调用 POST 操作时,我正在接收我的模型。
真正的问题是我的模型何时被绑定。正在创建它并与所有值绑定,但未提交的值除外,因为它不在Request.Params
集合中。
【问题讨论】:
这不应该发生。向我们展示您的 HTML。 只需接受模型作为 Action 的参数,您就可以按原样使用。 奇怪,我从来没有见过这个。它总是发布价值,不管它们是如何改变的,或者它们是否完全改变了 您是否在 Fiddler 中查看过值是如何提交的? 实际上我似乎记得禁用字段导致它们无法发布,你这样做吗? 【参考方案1】:我只在禁用字段时看到过这种行为。因此,我通常有一个 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();
我不知道有什么更简单的方法可以做到这一点,如果你能“标记”一些指示所有字段都提交的东西,那就太好了。但我不知道这是否存在,也许其他人可以提供更好的解决方案。
编辑:似乎禁用字段不提交只是 HTML 的本质,与 MVC 无关。
似乎如果您将字段设为readonly
而不是disabled
,则值仍将提交。但是,使用这种方法,您将失去“禁用”样式。此规则的例外是select
控件,看来这也不会在readonly
下提交。 More information on this can be in this question
【讨论】:
谢谢,缪斯凡。这仍然是一个非常简单的解决方案。 感谢您的额外研究。使用readonly
实际上效果很好。无论如何,我对禁用/只读元素都有自己的样式。
@MikeWebb:不用担心,我也很想了解更多相关信息【参考方案2】:
尝试使用 razor 助手构建表单标签。
@using(Html.BeginForm()) ..
// make sure this is a submit button
<input type="submit" value="Save" />
在你的控制器动作 post 方法中确保你装饰它 [HttpPost]。 例如,
[HttpPost] 公共 ActionResult 编辑(YourModel 模型)
【讨论】:
这并不能解决问题,这只是说明如何提交表单。 OP似乎已经能够做到这一点。另外,请正确格式化您的代码 @Tib,问题实际上不在控制器/操作级别。问题是该值不在Request.Params
集合中,该集合被发送到服务器并用于构建传递给动作的模型。在我的情况下,生成的模型是不完整的,因为我没有收到来自表单提交的所有输入值。以上是关于在 C# MVC 应用程序中,是不是可以在未更改的控件中从网页提交变量?的主要内容,如果未能解决你的问题,请参考以下文章
在构建我的 c# 项目时,出现“在未引用的程序集中定义”错误,如何解决?