2014-03-27 82 views
0

我現在正在使用ASP.NET MVC,並且發現了一些我不明白的viewModels。我woked了一個非常簡單的例子,當發生這種情況:ViewModel屬性更改沒有效果

我有一個屬性一個簡單的視圖模型:

public class Testmodel 
{ 
    public int Test { get; set; } 
    public Testmodel() 
    { 
     Test = 0; 
    } 
} 

,我想更改的屬性在我的控制器是這樣的:

[HttpPost] 
    public ActionResult Index(Models.ViewModels.Testmodel model) 
    { 
     model.Test += 1; 
     return View(model); 
    } 

在我的視圖中,只有直接訪問屬性時纔會看到更改的效果,而不是當我使用數據綁定時。視圖看起來是這樣的:

@model hobble.Models.ViewModels.Testmodell 
@{ 
    ViewBag.Title = "Startseite"; 
} 
@using (Html.BeginForm()) { 
<p>It is @Model.Test</p> 

<div> 
    @Html.EditorFor(model => model.Test) 
    </div> 
    <input type="submit" value="Test" /> 
} 

在文本部分,在那裏我直接訪問Model.Test財產,我得到了更新,但在編輯欄中,我不知道。我希望每次點擊提交按鈕時,測試屬性都會增加1,但這不會發生。 有人可以向我解釋,我有什麼錯?

回答

1

發生這種情況的原因是,無論何時您從MVC中的POST返回一個對象,都會假設您正在這樣做,因爲存在驗證錯誤,所以不是使用控制器中的模型值填充表單,而是抓取來自ModelState的值。

快速「解決方案」是使用ModelState.Clear(),但這不推薦,因爲你基本上忽略了MVC內置功能。

正如您已經注意到的那樣,您可以不使用Html Helpers或使用Post-Redirect-Get模式進行調查。

使用ModelState.Clear(),以防萬一你要忽略「辦不使用 - 這-解決辦法」警告:

public ActionResult Index(Testmodel model) 
{ 
    model.Test++; 
    ModelState.Clear(); 
    return View(model); 
} 
+0

沒關係啊,謝謝。我會嘗試使用「正確」的方式。在開始時,這很令人困惑:D – PeterO