Действие для ajax.beginform, выбрасывающего 404 из приложения MVC, а не из Fiddler
У меня есть следующее, и я получаю 404 при отправке, но от скрипача я получаю ошибку 500 о том, что у меня нет антифургонного токена. Есть мысли, что может быть не так?
Код ShareController.cs
// creates the form
[HttpPost]
public ActionResult ShareVideoFormEmail(string vguid)
{
var shareModel = GetShareVideoFormEmailModel(vguid);
return PartialView("ShareVideoFormEmail", shareModel);
}
// handler function
[HttpPost]
[ValidateHoneyPot]
[ValidateAntiForgeryToken]
public ActionResult ProcessShareVideoFormEmail(ShareVideoEmailModel model)
{
//do stuff
return PartialView("Result");
}
ShareVideoFormEmail.cshtml
@model Gcc.GctWebsite.Areas.Forms.Models.Share.ShareVideoEmailModel
@using (Ajax.BeginForm("ProcessShareVideoFormEmail","share",null ,new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "shareVideoFormWithMyFriends",
OnBegin = "onBeginShareEmail", @* show ajaxspinner *@
OnComplete = "onCompleteShareEmail", @* hide ajaxspinner *@
OnSuccess = "onSuccessShareEmail" @* hide ajaxspinner *@
}, new { id = "shareVideoEmailModelForm" }))
{
<div class="modal-header">
<div class="modal-header-title">Share the video "@ViewBag.VideoTitle" with my friends</div>
</div>
<div class="modal-body">
<div id ="shareVideoFormWithMyFriends" class="share-form-email">
@Html.AntiForgeryToken()
@Html.HoneyPot()
@Html.HiddenFor(x => x.UpdateTargetId)
@Html.HiddenFor(x => x.OgMetaTitle)
@Html.HiddenFor(x => x.OgMetaDescription)
@Html.HiddenFor(x => x.OgMetaDefaultImage)
@Html.HiddenFor(x => x.OgMetaImage)
@Html.HiddenFor(x => x.Brand)
@Html.HiddenFor(x => x.VGuid)
@Html.HiddenFor(x => x.TripCode)
@Html.HiddenFor(x => x.EmailSubject)
<!-- big section of input fields for model properties -->
<div class="form-field">
<span class="req-lbl">* = Required</span>
</div>
<div class="form-field form-submit">
<input class="btn btn-main-theme btn-narrow btn-submit-form" value="Send Email" type="submit">
<input type="reset" class="btn btn-grey btn-reset cancel-share-Email" value="Cancel">
</div>
<script>
$(document).ready(function (e) {
$('.required-input').after("<span class=\"rqdfield\">*</span>");
loadJqueryValidationManually("#shareVideoEmailModelForm");
});
</script>
1 ответ
Оказывается, что в моей модели в некоторых данных были некоторые html нет-нет. Мне пришлось htmlencode пару свойств, прежде чем отображать представление, затем он работал нормально при обратной передаче. Я обнаружил это, изменив входной параметр метода действия на object и удалив проверку honeypot и xsfr. Затем я получил хорошую ошибку 500, объясняющую, что у меня были небезопасные данные.