2017-07-06 45 views
-1

我的视图形式替换JSON结果是相同的,因为这在AJAX MVC

<div class="col-sm-3 "> 
    @{Html.RenderAction("Subscribe", "Home");} 
    </div> 

上另一方面我的动作是

public ActionResult Subscribe() 
    { 
     return PartialView("_Subscribe"); 
    } 

    [HttpPost] 
    public ActionResult Subscribe(Subscribe subscribe) 
    { 
     if (ModelState.IsValid) 
     { 
      subscribe.Active = false; 
      subscribe.IpAddress = Request.UserHostName; 
      Guid gui = Guid.NewGuid(); 
      subscribe.ActiveCode = gui; 
      subscribe.SubmitDate = DateTime.Now; 
      //_db.SaveChanges(); 
      return Json("subscribe is complate, please check your email", JsonRequestBehavior.AllowGet); 

     } 
     return Json("error", JsonRequestBehavior.AllowGet); 

    } 
在partialview

@model Jar.Models.Subscribe 
      <div Id="subForm" class="single-widget"> 
       @using (Html.BeginForm()) { 
       @Html.TextBoxFor(x => x.Email, new { htmlAttributes = new { 
       @class = "form-control", @placeholder = "email" } }) 

      <button type = "submit" id = "btn_Subscribe" class="btn btn-default"><i class="fa fa-arrow-circle-o-left"></i></button> 
} 

和in ajax

$(document).ready(function() { 

$("#btn_Subscribe").click(function() { 

    $.ajax({ 
     type: 'POST', 
     url: '@Url.Action("Subscribe")', 
     dataType: 'json', 
     data: { Email: $("#Email").val() }, 
     success: function(data) { 
      alert(data); 
     } 
    }); 
}); 

});

好的,我想单击订阅按钮时,电子邮件发送到数据库并返回json,并用所有订阅表单(文本框和按钮)替换json, 现在当我点击订阅,电子邮件注册,但返回到新页面文本“订阅是complate,请检查您的电子邮件” 我如何更改此代码以用json文本替换订阅表单?

回答

1

首先,我建议将您的活动连接到form元素的submit方法。

其次,你应该改变你的反应类型的对象,以便它可以更有效地编码为JSON,响应较为一致:

[HttpPost] 
public ActionResult Subscribe(Subscribe subscribe) 
{ 
    if (ModelState.IsValid) 
    { 
     // your code... 
     return Json(new { Message = "subscribe is complate, please check your email" }, JsonRequestBehavior.AllowGet); 
    } 
    return Json(new { Message = "error" }, JsonRequestBehavior.AllowGet); 
} 

最后,为了实现自己的目标,你可以使用text()方法来查看包含表单的div的内容,它将替换内容。试试这个:

$("#subForm form").on('submit', function(e) { 
    e.preventDefault(); 
    $.ajax({ 
    type: 'POST', 
    url: '@Url.Action("Subscribe")', 
    dataType: 'json', 
    data: { 
     Email: $("#Email").val() 
    }, 
    success: function(data) { 
     $('#subForm').text(data.Message); // note the use of text() here 
    } 
    }); 
}); 
+0

我使用它,但当我点击按钮页面刷新并显示源页面代码 – sunny

+0

对不起!我的错误 - 我忘了将'preventDefault()'调用添加到事件中 –