我创建了一个部分视图,允许用户输入他们的电子邮件并添加到订阅者列表中。最初我把它作为标准帖子工作,一切正常。
但是现在我正在尝试将其设为ajax调用,并且由于某种原因,即使表单发布到正确的控制器,模型也始终为空,我无法弄清楚原因。
以下是我的观点:
家长观点:
@Html.Partial("Shared/Newsletter/NewsletterForm", new NewsletterSubscriber())
表格部分:
@using (Ajax.BeginForm("NewsletterSignUp", "Newsletter", new AjaxOptions { HttpMethod = "POST" }))
{
<input type="text" name="EmailAddress" id="newsletter-email" class="basic-input" placeholder="Email Address">
<button id="submit-newsletter" class="basic-submit">Sign Up</button>
<p id="status"></p>
}
控制器:
[HttpPost]
public ActionResult NewsletterSignUp(NewsletterSubscriber model)
{
if (!ModelState.IsValid)
{
return Content("Please enter a valid e-mail address");
}
// Do logic...
}
型号:
public class NewsletterSubscriber
{
[Required]
[EmailAddress]
[StringLength(300)]
public string EmailAddress { get; set; }
}
脚本:
<script src="/scripts/jquery.validate.min.js"></script>
<script src="/scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="/scripts/jquery.unobtrusive-ajax.min.js"></script>
<script>
$(function() {
$('#submit-newsletter').on('click', function(e) {
e.preventDefault();
$.post('/umbraco/surface/Newsletter/NewsletterSignUp', function (data) {
console.log(data);
$('#status').show().text(data);
});
});
});
</script>
就像我说的那样,当我单步执行代码时,帖子正在击中正确的控制器,但是模型总是以null形式出现。
我哪里错了?
答案 0 :(得分:1)
我刚刚意识到我有ajax表单为我处理提交,我试图在另一个脚本中手动发布表单。一旦我删除了其他脚本就可以了。
(结束漫长的一天,我错过了这个明显的错误!)