2012-02-24 44 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中为您创建一个错误列表。您必须从模型状态中删除您希望在控制器操作内部忽略的错误。然后您可以更新模型上的实际值。 (达林季米特洛夫显示了这样的一个例子)