使用Ajax.BeginForm

时间:2015-05-26 16:11:46

标签: c# asp.net-mvc

我创建了一个部分视图,允许用户输入他们的电子邮件并添加到订阅者列表中。最初我把它作为标准帖子工作,一切正常。

但是现在我正在尝试将其设为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形式出现。

我哪里错了?

1 个答案:

答案 0 :(得分:1)

我刚刚意识到我有ajax表单为我处理提交,我试图在另一个脚本中手动发布表单。一旦我删除了其他脚本就可以了。

(结束漫长的一天,我错过了这个明显的错误!)