私は 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 で更新した方が良いですか? 代替案?
ありがとう