0

私は asp.net mvc の初心者です。 asp.net mvc の再利用可能なお問い合わせフォーム コンポーネントを開発しようとしています。

フォームを使用して PartialView を作成しようとしましたが、再利用可能なコンポーネントを作成するために、これがより良いアプローチであるかどうかはわかりません

私のPartialViewは

@model MyModel.ContactData

@using (Html.BeginForm("ContactForm", "ContactForm", FormMethod.Post)) {
<fieldset>
    <p>
        @Html.LabelFor(model => model.MailAddress)
        @Html.EditorFor(model => model.MailAddress)
    </p>
    <p>
        @Html.LabelFor(model => model.Message)
        @Html.TextAreaFor(model => model.Message)
    </p>
    <input type="submit" value="Save" />
</fieldset>

}

問題はコントローラーから始まります。コントローラーは、この partialView のみの特定のコントローラーです。

public class ContactFormController : Controller
{
    [HttpPost]
    public ActionResult ContactForm(ContactData contactData)
    {
        if (ModelState.IsValid)
        {
            return PartialView("MessageSend");
        }

        return PartialView();
    }
}

私の問題は、必須フィールドの一部が空の場合です。その場合、コントローラーは部分ビューのみを返し、親コンテキスト内の部分ビューを返しません。@Html.Partial、@Html.RenderAction、@Html.RenderPartial として親ビューから PartialView を呼び出してみましたが、同じことが起こります。

親コンテキスト内の部分ビューを返すにはどうすればよいですか? return View(ParentViewsName, contactData) を試してみましたが、フォーム送信時にアドレスバーの URL が /Contact から /ContactForm/ContactForm に変更されるため、嫌いです。

おそらく、間違ったアプローチで再利用可能なコンポーネントを作成しようとしていますか? PartialView のみ ajax で更新した方が良いですか? 代替案?

ありがとう

4

2 に答える 2

0

私の理解では、ユーザーがフォームを正常に送信した後、部分的なビューであるステータスメッセージを表示したいと思います。tempdataはこのような状況に適していると思います。

public class ContactFormController : Controller
{
    [HttpPost]
    public ActionResult ContactForm(ContactData contactData)
    {
        if (ModelState.IsValid)
        {
            TempData["success"] = true;             
            return RedirectToAction("parentpage");
        } 

        return View(contactData);
    }
}

親ページで、TempData ["success"]がnullかどうかを確認し、部分ビュー「MessageSend」を表示します。

于 2012-12-13T21:50:13.413 に答える
0

最後に、Sundeep が説明するように、この例Partial ASP.NET MVC View submitのように ajax を使用してこれを行いました。

ご協力いただきありがとうございます。

于 2012-12-17T19:17:00.860 に答える