0

私のasp.net mvc 3アプリケーションには、フォームが検証されるビューがたくさんあります。ある段階で、検証が(どこでも)機能しなくなったことに気付きました。

その時から何をしたか思い出せない。さらに、バックワードを以前のリポジトリコミットに移動しようとしましたが、問題はずっと前に発生したようで、今になって初めて気づきました!!

私が確信している唯一のことは、データベースを何度も変更する必要があったため、.dbml ファイルを消去し、テーブルを何度も (何度も) ドラッグ アンド ドロップしたことです。

Linq to SQL を使用しています。ほとんどのビューは、「編集」テンプレートで生成されます。「WebStore.designer.cs」ファイル (「WebStore」はプロジェクト名) で [必須] 属性を使用します。とにかく、うまくいかない!

では、.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):

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 に答える