Asp.net mvc 3 asp.net mvc 3从控制器操作ajax返回消息

Asp.net mvc 3 asp.net mvc 3从控制器操作ajax返回消息,asp.net-mvc-3,Asp.net Mvc 3,我有一个关于Ajax表单提交的问题。代码如下: 控制器 [HttpPost, ValidateAntiForgeryToken, ValidateInput(true)] public ActionResult Contact(ContactForm model) { if (!ModelState.IsValid) { return new EmptyResult(); }

我有一个关于Ajax表单提交的问题。代码如下:

控制器

[HttpPost, ValidateAntiForgeryToken, ValidateInput(true)]
public ActionResult Contact(ContactForm model)
{
    if (!ModelState.IsValid)
    {                    
        return new EmptyResult();                    
    }
    else
    {
        string message = model.Name + " " + model.Telephone + " " + model.Email + " " + model.Address + " " + model.City + " " + model.ZipCode;

        //send it    

        return new EmptyResult();
     }
}
查看

<script type="text/javascript">

    function PostSuccess() {
        $('.success-message').html("Thank you for your interested");
    }

    function PostFailure() {
        $('.success-message').html("Something went wrong... Make sure the required fields are filled out and in correct format");
    }
</script>
<div class="contact-form">
@using (@Ajax.BeginForm("Contact", "Info", new AjaxOptions { HttpMethod = "Post", OnFailure = "PostFailure", OnSuccess = "PostSuccess" }))
{ 
    <p>
    @Html.LabelFor(x => x.Name, "Your name") 
    @Html.TextBoxFor(x => x.Name, new { @class = "required" })<span class="required">*</span>
    </p>

    <p>
    @Html.LabelFor(x => x.Email, "Your email")
    @Html.TextBoxFor(x => x.Email)<span class="required">*</span>
    </p>

    <p>
    @Html.LabelFor(x => x.Telephone, "Your phone")
    @Html.TextBoxFor(x => x.Telephone)<span class="required">*</span>
    </p>

    <p>
    @Html.LabelFor(x => x.Address, "Your address")
    @Html.TextBoxFor(x => x.Address)
    </p>

    <p>
    @Html.LabelFor(x => x.ZipCode, "Your zipcode")
    @Html.TextBoxFor(x => x.ZipCode)
    </p>

    <p>
    @Html.LabelFor(x => x.City, "Your city")
    @Html.TextBoxFor(x => x.City)
    </p>
    @Html.AntiForgeryToken()
    <button type="submit" id="bContact">Send Message</button>
}

<div class="required">* Required Fields</div>
<div class="success-message">Output</div>

函数PostSuccess(){
$('.success message').html(“感谢您的关注”);
}
函数PostFailure(){
$('.success message').html(“出现了问题……请确保填写了所需的字段,并且格式正确”);
}
@使用(@Ajax.BeginForm(“Contact”、“Info”、新的AjaxOptions{HttpMethod=“Post”、OnFailure=“PostFailure”、OnSuccess=“postsucture”}))
{ 

@LabelFor(x=>x.Name,“您的名字”)
@TextBoxFor(x=>x.Name,新的{@class=“required”})*

@LabelFor(x=>x.Email,“您的电子邮件”) @Html.TextBoxFor(x=>x.Email)*

@LabelFor(x=>x.phone,“您的电话”) @Html.TextBoxFor(x=>x.Telephone)*

@LabelFor(x=>x.Address,“您的地址”) @Html.TextBoxFor(x=>x.Address)

@LabelFor(x=>x.ZipCode,“您的ZipCode”) @Html.TextBoxFor(x=>x.ZipCode)

@LabelFor(x=>x.City,“您的城市”) @Html.TextBoxFor(x=>x.City)

@Html.AntiForgeryToken() 发送消息 } *必填字段 输出
我只想在“成功信息”课上发一条合适的信息,但帖子总是成功的,所以我总是收到“谢谢你的关注”


谢谢。

OnSuccess
OnFailure
是指AJAX调用成功还是失败。从MSDN获取:

您可以执行以下操作以使OnFailure运行:

throw new HttpException(404, "Not Found");

但是我建议最好将成功事件更改为调用一个javascript函数,该函数将解析调用的结果。

OnSuccess
OnFailure
是指AJAX调用成功还是失败。从MSDN获取:

您可以执行以下操作以使OnFailure运行:

throw new HttpException(404, "Not Found");

但我建议最好将成功事件更改为调用javascript函数,该函数将解析调用的结果。

如果我理解正确,您希望表单得到验证。也就是说,如果用户进行了一些无效的输入,您希望显示
PostFailure
中的消息,并强制用户在运行控制器的
else
语句中的代码之前进行更正。您还没有发布您的模型,所以我不知道您是否正在这样做,但是对于要验证的表单,您应该使用

例如,您的模型应包含:

[Required(ErrorMessage = "Name is required!")]
public string Name { get; set; }
用于名称字段。您可以将消息更改为您想要的任何内容,这允许使用特定于
名称的消息,而不是您想要的通用消息

然后在视图中,您应该包括:

@Html.ValidationMessageFor(x => x.Name)
并确保包括:

<appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>


在您的
web.config
文件中启用客户端验证(假设您已包括jQuery验证库,但它们默认包含在ASP.NET MVC3项目中)。

如果我理解正确,您希望验证表单。也就是说,如果用户进行了一些无效的输入,您希望显示
PostFailure
中的消息,并强制用户在运行控制器的
else
语句中的代码之前进行更正。您还没有发布您的模型,所以我不知道您是否正在这样做,但是对于要验证的表单,您应该使用

例如,您的模型应包含:

[Required(ErrorMessage = "Name is required!")]
public string Name { get; set; }
用于名称字段。您可以将消息更改为您想要的任何内容,这允许使用特定于
名称的消息,而不是您想要的通用消息

然后在视图中,您应该包括:

@Html.ValidationMessageFor(x => x.Name)
并确保包括:

<appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>


web.config
文件中启用客户端验证(假设您已经包括jQuery验证库,但它们默认包含在ASP.NET MVC3项目中)。

要在“成功消息”类中获得适当的消息,必须在操作中更改代码。 例如:

[HttpPost, ValidateAntiForgeryToken, ValidateInput(true)]
        public ActionResult Contact(ContactForm model)
        {
            if (!ModelState.IsValid)
            {

                return Json("", JsonRequestBehavior.AllowGet);

            }
            else
            {
                string message = model.Name + " " + model.Telephone + " " + model.Email + " " + model.Address + " " + model.City + " " + model.ZipCode;
                return Json(message, JsonRequestBehavior.AllowGet);
            }
        }
在success函数中,将参数放在其中

function PostSuccess(data) {

        $('.success-message').html(data);
    }

要在“successmessage”类中获得适当的消息,必须在操作中更改代码。 例如:

[HttpPost, ValidateAntiForgeryToken, ValidateInput(true)]
        public ActionResult Contact(ContactForm model)
        {
            if (!ModelState.IsValid)
            {

                return Json("", JsonRequestBehavior.AllowGet);

            }
            else
            {
                string message = model.Name + " " + model.Telephone + " " + model.Email + " " + model.Address + " " + model.City + " " + model.ZipCode;
                return Json(message, JsonRequestBehavior.AllowGet);
            }
        }
在success函数中,将参数放在其中

function PostSuccess(data) {

        $('.success-message').html(data);
    }