使用modelstate.isvalid来验证MVC3中控制器内部的数据

时间:2012-02-24 15:13:21

标签: asp.net-mvc-3

我是ASP.NET MVC3的新手,但我有大约4年的PHP框架经验。

我正在尝试构建一个MVC3 Web应用程序,但我在验证我的模型时遇到了问题。 这是一个测试控制器,向您展示我正在尝试的内容,但没有成功。

我正在尝试将值传递给控制器​​内的模型,但它并没有考虑参数。

我尝试使用modelstate.setmodelvalue,用于junk.sentence,但它保留了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);
    }

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

当模型错误添加到模型状态时,ModelState.IsValid返回false。 MVC验证模型上的属性,并在ModelState中为您创建错误列表。您必须从控制器操作中删除希望忽略的模型状态中的错误。然后,您可以更新模型上的实际值。 (Darin Dimitrov向您展示了这样做的一个例子)