Вы на самом деле не показали, какие скрипты вы включили в свою страницу, как выглядит разметка вашего представления и т. Д. ... вещи, позволяющие нам воспроизвести вашу проблему.Обычно я делаю с такими вопросами попытку привести полный пример, который, я думаю, может быть близок к тому, что вы пытаетесь сделать.
Модель:
public class FeedBack
{
[Required]
[Display(Name = "Feedback")]
public string Feedback { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GiveFeedback()
{
return PartialView(new FeedBack());
}
[HttpPost]
public ActionResult GiveFeedback(FeedBack model)
{
if (!ModelState.IsValid)
{
return PartialView(model);
}
return Json(new { result = "Thanks for submitting your feedback" });
}
}
Представление (~/Views/Home/Index.cshtml
):
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('#feedbackLink').click(function () {
$('#feedback').dialog({
modal: true,
open: function (event, ui) {
$(this).load($(this).data('url'), function () {
$.validator.unobtrusive.parse($(this));
});
}
});
return false;
});
});
var onSuccess = function (data) {
if (data.result) {
alert(data.result);
$('#feedback').dialog('close');
} else {
$.validator.unobtrusive.parse($('#popForm'));
}
}
</script>
@Html.ActionLink("Give feedback", "GiveFeedback", null, new { id = "feedbackLink" })
<div id="feedback" data-url="@Url.Action("GiveFeedback")"></div>
Примечание: очевидно, что сценарии, которые я показал в этом представлении индекса, там не имеют никакого отношения.Они должны быть перемещены в макет, а встроенный скрипт перемещен в отдельный файл javascript и указан в макете.Я просто включил их, чтобы показать, какие сценарии необходимы для работы примера.
И, наконец, у нас есть партиал, содержащий форму обратной связи (~/Views/Home/GiveFeedback.cshtml
):
@model FeedBack
@using (Ajax.BeginForm("GiveFeedback", "Home", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "feedback", OnSuccess = "onSuccess" }, new { id = "popForm" }))
{
<ul>
<li>
@Html.EditorFor(x => x.Feedback)
@Html.ValidationMessageFor(x => x.Feedback)
</li>
</ul>
<input type="submit" />
}