0

我在验证表单的 asp.net mvc 3 应用程序中有很多视图。在某个阶段,我注意到验证停止工作(无处不在)。

我不记得从那以后我做了什么。此外,我尝试将后备词移到以前的存储库提交中,并且似乎问题发生在很久以前,而我现在才注意到这一点!

我唯一确定的是我必须多次更改数据库,所以我清理了 .dbml 文件并一次又一次地拖放我的表(很多次)。

我使用 Linq 到 SQL。大多数视图都是使用“编辑”模板生成的。在“WebStore.designer.cs”文件(“WebStore”是项目名称)中,我使用 [Required] 属性。总之,不行!

那么,.dbml 文件的更改会影响视图的验证吗?

先感谢您!

编辑:

例如这里是视图:

@model WebStore.WebStoreModels.Post   

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

    @Html.HiddenFor(model => model.PostId)

    <div>Title</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Title)
        @Html.ValidationMessageFor(model => model.Title)
    </div>

    <div>Text</div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Text)
        @Html.ValidationMessageFor(model => model.Text)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
}

如果我不填写表格并单击“保存”,我将在我的数据上下文包装器中得到一个 SqlException(我保存更新后的帖子):

public void UpdatePost(Post post)
    {
        var dbPost = GetPost(post.PostId);
        dbPost.Title = post.Title;
        dbPost.Text = post.Text;
        _dataContext.SubmitChanges(); // here the exception occures
    }

验证不起作用!来自 WebStore.designer.cs 的代码块:

[Required(ErrorMessage = "Post title is required")]
public string Title
{ // here goes the content of this Post's property }

编辑(2):

这里有两种操作方法:

    [HttpGet]
    public ViewResult EditPost(int id)
    {
        var post = _postsRepository.GetPost(id);
        return View(post);
    }

    [HttpPost]
    public RedirectToRouteResult EditPost(Post post)
    {
        _postsRepository.UpdatePost(post);
        return RedirectToAction("NewsFeed");
    }
4

1 回答 1

0

您需要在调用 UpdatePost() 之前检查模型状态的有效性,即

[HttpPost]
public RedirectToRouteResult EditPost(Post post)
{
    if (!this.ModelState.IsValid)
    {
        return this.View(model);
    }
    else
    {
        _postsRepository.UpdatePost(post);
        return RedirectToAction("NewsFeed");
    }
}

我希望这有帮助。

于 2013-01-07T11:53:35.737 回答