2012-02-24 47 views
1

從控制器內部的數據我非常新的ASP.NET MVC3但我有大約4年的PHP框架方面的經驗。使用modelstate.isvalid來驗證MVC3

我試圖建立一個MVC3 Web應用程序,但我有我的validationg模型的問題。 這裏是一個測試控制器,告訴你我正在嘗試沒有成功。

我試圖將值傳遞給我的控制器內部模型,但它不把它考慮的參數。

我試過對於junk.sentence使用modelstate.setmodelvalue,但是它保持POST請求的值無效,我想在控制器中默認更改(用於測試目的)。

任何人都可以幫忙嗎?

在此先感謝。

邁克爾

[HttpPost] 
    public ActionResult Create(Junk junk) 
    { 
     //ModelState.Clear(); 
     junk.sentence = "coucou"; 

     ModelState.SetModelValue("sentence", new ValueProviderResult(junk.sentence, junk.number, null)); 


     //ModelState 
     if (ModelState.IsValid) 
     { 
      db.Junks.Add(junk); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(junk); 
    } 

    // 
    // GET: /Junk/Edit/5 

    public ActionResult Edit(int id) 
    { 
     Junk junk = db.Junks.Find(id); 
     return View(junk); 
    } 

回答

1

嘗試從ModelState中取出:

[HttpPost] 
public ActionResult Create(Junk junk) 
{ 
    junk.sentence = "coucou"; 

    //ModelState 
    if (ModelState.IsValid) 
    { 
     db.Junks.Add(junk); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    ModelState.Remove("sentence"); 
    return View(junk); 
} 

這是假設在你看來,你有一個使用了一些HTML輔助時所產生的相應的輸入領域,如EditorFor爲例如:

@Html.EditorFor(x => x.sentence) 

或者:

@Html.TextBoxFor(x => x.sentence) 
+0

與解決方案的問題是,它不驗證「句」了,因爲現在它是一個常量字符串,但後來我想提出的變量...我將想驗證。但感謝您的回答! – 2012-02-24 15:21:21

+0

@MichaelCh,哎呀,的確如此。我已經更新了我的答案,並在返回視圖之前移動了「ModelState.Remove」。 – 2012-02-24 15:22:30

+0

還有一個問題在這種情況下,因爲現在modelstate.isvalid犯規考慮到「垃圾」模式的新的價值... 我不能有一個HTML幫手在我看來,因爲我有一個多對多的關係,所以我使用複選框,我會從的FormCollection ... – 2012-02-24 15:35:34

0

當模型錯誤添加到模型狀態時,ModelState.IsValid返回false。 MVC驗證模型中的屬性並在ModelState中爲您創建一個錯誤列表。您必須從模型狀態中刪除您希望在控制器操作內部忽略的錯誤。然後您可以更新模型上的實際值。 (達林季米特洛夫顯示了這樣的一個例子)