1

私はMVC3に非常に慣れておらず、頭を包み込むのに問題があります。現在、以下に簡略化した部分的なビューがあります。

@model blah.blah.blah.blah.ForumPost

@using (Html.BeginForm()) {

<fieldset>
    <legend>ForumPost</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ForumID)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ForumID)
        @Html.ValidationMessageFor(model => model.ForumID)
    </div>
    <p>
        <input type="submit" value="Create" />
        @Html.ValidationSummary(true)
    </p>
</fieldset>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
}

私はフォームの検証のために何をすべきかではありません。私はjquery検証を使用しようとしていますが、自分が行っていることに適合する良い例を見つけることができず、迷子になっているようです。私はここでこの例に基づいていましたが、それだけでは十分ではありません。

完了したら、コードでメソッドを呼び出したいのですが、これを行うためのクリーンな方法がよくわかりません。私が現在機能している方法は、ajax呼び出しを使用することであり、それは本当に醜いです。また、同僚は私が実際のフォーラム投稿にメソッドを渡すことを提案しましたが、方法がわかりません。呼び出したいメソッドのコードは次のとおりです。

public void PostToForum(ForumPost post)
{
    UserService cu = new UserService();
    int PostUserID = cu.GetUserIDByUsername(base.User.Identity.Name);

    if (this.ModelState.IsValid)
    {
        ForumPost nfp = service.CreateForumPost(post);
    }
}

誰かがいくつかのヒントがありますか?ありがとう。

必要に応じて、さらにコードを提供できます。

4

1 に答える 1

2

Htmlフォームは通常、コントローラーアクションに送信されます。

[HttpPost]
public ActionResult Create(ForumPost model)
{
    if (!ModelState.IsValid)
    {
        // validation failed => redisplay the view so that the user can fix the errors
        return View(model);
    }

    // at this stage the model is valid => process it:
    service.CreateForumPost(model);

    return ...
}

これは部分的なビューであるため、モデルだけでなく、このコントローラーアクションから返されるビューにも注意する必要があります。AJAXを使用しない場合は、親ビュー全体と親ビューモデルを返す必要があります。AjaxFormを使用する場合は、部分的なモデルとビューでしか作業できません。また、この場合、成功した場合は、Jsonの結果をビューに返して、この成功を示し、実行されるjavascriptハンドラーがそれぞれのアクションを実行できるようにすることができます。

于 2012-05-08T15:15:12.333 に答える