2011-03-15 45 views
1

hejdig。aspnetmvc模型已更新,但不更新控件

在Aspnetmvc2我有一個模型對象,我發送到視圖。視圖中的控件不會使用該值進行更新。爲什麼?我陷入了什麼明顯的陷阱?

的觀點:

<%:Html.TextBox(
    "MyNumber", 
    null == Model ? "1111" : Model.MyNumber) %> 
<%:Model.MyNumber%> 

是第一槽取出一個GET。文本框中的「1111」值手動更新爲「2222」。我們將表單發送到控制器,該控制器將「2222」附加到Model對象並將其再次發送到視圖。

控制器:

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Index(MyModel myModel) 
    { 
     myModel.MyNumber += " 2222"; 
     return View(myModel); 
    } 

產品總數,我們得到這樣的輸出:

<input id="MyNumber" type="text" value="1111"> 
1111 2222 

正如你所看到的控制不使用模型的屬性,而是回落到沒有按thew視圖狀態在Aspnetmvc中不存在。
(這與剃刀相同)

回答

6

這很正常,它是HTML助手的工作方式:它們首先查看模型狀態,然後查看綁定值時的模型。因此,如果您打算在POST操作中修改某些屬性,則需要先將其從模型狀態中刪除,否則您將始終獲得舊值:

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    ModelState.Remove("MyNumber"); 
    myModel.MyNumber += " 2222"; 
    return View(myModel); 
} 
+2

使用ModelState.Clear()清除所有屬性。 – LosManos 2011-05-14 14:46:04

+0

如果是這樣的話,那麼如果幫助者會忽略它,那麼說'返回View(model)'(來自編輯動作)有什麼意義?第二點,你的許多答案爲我節省了這一天,就像這一次。 – 2016-02-10 01:46:15

+0

@EricNelson,重點在於模型可以在視圖中使用不同於HTML助手的東西。例如顯示一些值:'

@Model.MyNumber
'。如果你不把模型傳遞給視圖,那麼你會得到一個非常好的NRE。 – 2016-02-10 07:37:24