こんにちは、私の質問は次のとおりです。2つの div があり、1 つの div には @ajax.beginform が含まれ、もう 1 つの div は空ですが非表示になっています。私が持っているアイデアは、フォームを含むdivがajaxリクエストを作成するために、コントローラーのアクションメソッドがモデルが有効かどうかを検出し、有効でない場合はフォームの同じコンテンツを再送信することです(コンテンツの1つの部分ビューフォーム) ただし、検証エラーがあります。モデルが有効かどうか、単純な「ありがとう」を含む別の部分ビューコンテンツを返し、divに表示されますが非表示になっている場合、フォームを持つdivを非表示にする必要があります。私はこれを行う方法がわからない??? 私の考えでは、@ajax.beginform の onSuccess イベントにはパラメーターとしてサーバーから返された html がありますが、サーバーから返されるコンテンツがわからない、つまり、どの div が表示されるかわかりません。お願い助けて。
PD: 質問が理解できない場合は、お知らせください。例を挙げます。
[[[[[[アップデート]]]]]]
私はモデルを持っています:
public class Message{
public int MessageID { get; set; }
[Required]
public string From { get; set; }
[Required]
public string Content { get; set; }
}
私はコントローラを持っています:
public class MessageController : Controller{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult saveMessage(Message msg) {
// (ModelState.IsValid)
if (!msg.From.Contains("@")) {
ModelState.AddModelError("From", "The mail must contain an @");
return PartialView("DataMsg", msg);
}
return RedirectToAction("thanks");
}
public PartialViewResult thanks() {
return PartialView();
}
}
と私の見解:
Index.cshtml :
@model MvcApplication1.Models.Message
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@section scripts{
<script>
function successMsg(data) {
// I want the "thank you" is displayed in the div with id="thanksUpdate" and not in #formUpdate
$("#formUpdate").html(data);
}
</script>
}
@using (Ajax.BeginForm("saveMessage",
new AjaxOptions { HttpMethod="Post", OnSuccess="successMsg"})) {
<div id="formUpdate">
@Html.Partial("DataMsg", Model);
</div>
}
<div id="thanksUpdate" style="display:none;">
</div>
データメッセージ.cshtml :
@model MvcApplication1.Models.Message
@Html.LabelFor(m => m.From)
@Html.EditorFor(m => m.From)
@Html.ValidationMessageFor(m => m.From)
@Html.LabelFor(m => m.Content)
@Html.EditorFor(m => m.Content)
@Html.ValidationMessageFor(m => m.Content)
<input type="submit" value="Send" />
そしてthank.cshtml :
<h2>Thank you</h2>
#formUpdate ではなく、id="thanksUpdate" の div に「ありがとう」を表示したい。どうすればそれができますか???