2013-04-29 50 views
4

我在我的page.cshtml文件中有一個C#MVC應用程序和<form>。在這種形式下,我有<input type="text" ... />元素。如果我提交此表格,我只能從手動更改值(即輸入文本框然後鍵入內容)的輸入中獲取Response.ParamsResponse.Form中的值。在C#MVC應用程序中,是否可以從未改變的控件中的網頁提交變量?

如果我用jQuery更改值,$('#myInput').val('some value');這不算作輸入值的變化,我在提交表單時沒有得到myInput的值。

有什麼辦法可以確保全部輸入提交?如果不是,那麼是否有一個很好的解決方法,也許在某些事件發生在我的模型被綁定之前?當提交時,我需要知道表單中的所有輸入值是否更改。

一些額外的信息:

的形式和其他值都得到正確提交,我收到了我的模型時POST操作被稱爲我的控制器。

真正的問題是當我的模型被綁定。正在創建並綁定除了未提交的值之外的所有值,因爲它不在Request.Params集合中。

+3

不應該發生的。向我們展示您的HTML。 – SLaks 2013-04-29 15:15:39

+0

只需將模型作爲Action的參數接受即可使用。 – Belogix 2013-04-29 15:15:57

+0

奇怪的是,我從來沒有見過這個。無論如何更改,它總是發佈價值,或者如果它們甚至發生了更改 – musefan 2013-04-29 15:15:59

回答

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下提交。 More information on this can be in this question

+0

謝謝,musefan。這仍然是一個非常簡單的解決方案。 – 2013-04-29 15:33:17

+2

感謝您的額外研究。使用'readonly'實際上可以完美地工作。無論如何,我都有自己的禁用/只讀元素樣式。 – 2013-04-29 15:57:42

+0

@MikeWebb:不用擔心,我很想了解更多關於此的內容 – musefan 2013-04-29 15:59:49

0

嘗試使用剃刀助手構建表單標記。

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

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

}

在你的控制器動作後方法確保你裝飾一下[HttpPost]。 例如,

[HttpPost] 公衆的ActionResult編輯(YourModel模型){

}

+0

這並不能解決問題,這只是顯示如何提交表單。 OP似乎已經能夠做到這一點。另外,請正確格式化您的代碼 – musefan 2013-04-29 15:36:13

+0

@Tib,問題實際上不在控制器/操作級別。問題是該值不在發送到服務器的'Request.Params'集合中,並用於構建傳遞給該Action的模型。在我的情況下得到的模型是不完整的,因爲我沒有收到表單提交中的所有輸入值。 – 2013-04-29 15:37:09

相關問題