4

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

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

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

一些附加信息:

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

真正的问题是我的模型何时被绑定。它正在创建并与所有值绑定,但由于不在Request.Params集合中而未提交的值除外。

4

2 回答 2

3

我只在禁用字段时见过这种行为。因此,我通常有一个 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有关这方面的更多信息可以在这个问题中

于 2013-04-29T15:28:06.580 回答
0

尝试使用 razor 助手构建表单标签。

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

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

}

在您的控制器操作发布方法中,确保您装饰它 [HttpPost]。例如,

[HttpPost] public ActionResult Edit(YourModel model) {

}

于 2013-04-29T15:32:47.630 回答