C# 使用Ajax.BeginForm发布数据时为空模型
我创建了一个局部视图,允许用户输入他们的电子邮件并添加到订户列表中。最初,我把这个职位作为标准职位,一切都很好 然而,现在我试图将其作为一个ajax调用,出于某种原因,即使表单发布到了正确的控制器,但模型总是显示为null,我不知道为什么 以下是我的看法: 父视图:C# 使用Ajax.BeginForm发布数据时为空模型,c#,asp.net-mvc,C#,Asp.net Mvc,我创建了一个局部视图,允许用户输入他们的电子邮件并添加到订户列表中。最初,我把这个职位作为标准职位,一切都很好 然而,现在我试图将其作为一个ajax调用,出于某种原因,即使表单发布到了正确的控制器,但模型总是显示为null,我不知道为什么 以下是我的看法: 父视图: @Html.Partial("Shared/Newsletter/NewsletterForm", new NewsletterSubscriber()) @using (Ajax.BeginForm("NewsletterSig
@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>
表单部分:
@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>
模型:
@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>
脚本:
@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>
$(函数(){
$(“#提交时事通讯”)。在('click',函数(e){
e、 预防默认值();
$.post(“/umbraco/surface/Newsletter/Newsletter注册”,功能(数据){
控制台日志(数据);
$('#status').show().text(数据);
});
});
});
就像我说的,当我一步一步地完成代码时,post正在命中正确的控制器,但是模型总是以null的形式通过
我哪里出错了?我刚刚意识到我有ajax表单为我处理提交,我试图在另一个脚本中手动发布表单。一旦我删除了附加脚本,它就工作了
(这是漫长的一天的结束,我错过了这个明显的错误!)你试过将EmailAddress更改为HTML助手吗?是的,我试过使用@HTML.EditorFor(model=>model.Email),但它仍然是空的,@HTML.TextBoxFor(model=>model.EmailAddress)呢?事实上我想我刚刚发现了问题-是脚本:-)