0

非常に単純なブログ投稿クリエーターがあり、投稿の名前が既に使用されているかどうかを確認しようとしています。Ajax は正しくポストバックしていますが、ページでは送信できず、エラーも発生しません。Create() アクション内にブレーク ポイントを設定すると、ヒットすることはありません。

モデル:

public class Post
{
    public int Id { get; set; }

    [Required]
    [Remote("CheckPostName","Home")]
    public string Name { get; set; }

    [Required]
    public string Author { get; set; }

    public DateTime Date { get; set; }

    [StringLength(400)]
    public string Content { get; set; }
}

Ajax アクション:

public bool CheckPostName(string Name)
{
    bool result = db.Posts.Where(a => a.Name.Equals(Name)).Count() == 0;
    return result;
}

送信アクション:

[HttpPost]
    public ActionResult Create(Post thePost)
    {
        if (ModelState.IsValid)
        {
            db.Posts.Add(thePost);
            db.SaveChanges();

            return View();
        }
        return View(thePost);
    }

そしてビュー:

@using (Html.BeginForm()) {
@Html.ValidationSummary()
<fieldset>
    <legend>Post</legend>

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

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

    <div class="editor-label">
        @Html.LabelFor(model => model.Content)
    </div>
    <div class="editor-field">
        @Html.TextAreaFor(model => model.Content)
        @Html.ValidationMessageFor(model => model.Content)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}
4

1 に答える 1

2

データを検証することになっている AJAX コントローラー アクションから JSON を返すようにしてください。

public ActionResult CheckPostName(string Name)
{
    bool result = db.Posts.Where(a => a.Name.Equals(Name)).Count() == 0;
    return Json(result, JsonRequestBehavior.AllowGet);
}

覚えておいてください: コントローラー アクションは常に ActionResult を返さなければなりません。それ以外の場合、それらはコントローラー アクションではありません。

于 2012-06-11T04:56:46.730 に答える