Asp.net-Mvc
將 Json 對像從控制器操作返回到 jQuery
我正試圖讓它正常工作(現在 2 天)。我正在登錄,我從 jQuery 呼叫控制器操作,向其傳遞 JSON 對象(使用 json2.js)並從控制器返回 Json 對象。我可以很好地呼叫該操作,但不能將響應放在我想要的位置,它只是打開一個新視窗,並在螢幕上列印:
{"Message":"Invalid username/password combination"}URL 看起來像http://localhost:13719/Account/LogOn所以不是呼叫操作而不是重新載入頁面,而是將使用者帶到控制器,這不好。
所以現在對於一些程式碼,首先是控制器程式碼
[HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl = "") { if (ModelState.IsValid) { var login = ObjectFactory.GetInstance<IRepository<PhotographerLogin>>(); var user = login.FindOne(x => x.Login == model.Username && x.Pwd == model.Password); if (user == null) return Json(new FailedLoginViewModel { Message = "Invalid username/password combination" }); else { if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl); else return RedirectToAction("Index", "Home"); } } return RedirectToAction("Index", "Home"); }和 jQuery 程式碼
$("#signin_submit").click(function () { var login = getLogin(); $.ajax({ type: "POST", url: "../Account/LogOn", data: JSON.stringify(login), dataType: 'json', contentType: 'application/json; charset=utf-8', error: function (xhr) { $("#message").text(xhr.statusText); }, success: function (result) { } }); }); function getLogin() { var un = $("#username").val(); var pwd = $("#password").val(); var rememberMe = $("#rememberme").val(); return (un == "") ? null : { Username: un, Password: pwd, RememberMe: rememberMe }; }如果您還需要在此處查看實際的登錄表單
<fieldset id="signin_menu"> <div> <span id="message"></span> </div> <% Html.EnableClientValidation(); %> <% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @id = "signin" })) {%> <% ViewContext.FormContext.ValidationSummaryId = "valLogOnContainer"; %> <%= Html.LabelFor(m => m.Username) %> <%= Html.TextBoxFor(m => m.Username, new { @class = "inputbox", @tabindex = "4", @id = "username" })%><%= Html.ValidationMessageFor(m => m.Username, "*")%> <p> <%= Html.LabelFor(m=>m.Password) %> <%= Html.PasswordFor(m => m.Password, new { @class = "inputbox", @tabindex = "5", @id = "password" })%><%= Html.ValidationMessageFor(m => m.Password, "*")%> </p> <p class="remember"> <input id="signin_submit" value="Sign in" tabindex="6" type="submit"/> <%= Html.CheckBoxFor(m => m.RememberMe, new { @class = "inputbox", @tabindex = "7", @id = "rememberme" })%> <%= Html.LabelFor(m => m.RememberMe) %> <p class="forgot"> <a href="#" id="forgot_password_link" title="Click here to reset your password.">Forgot your password?</a> </p> <p class="forgot-username"> <a href="#" id="forgot_username_link" title="Fogot your login name? We can help with that">Forgot your username?</a> </p> </p> <%= Html.ValidationSummaryJQuery("Please fix the following errors.", new Dictionary<string, object> { { "id", "valLogOnContainer" } })%> <% } %> </fieldset>登錄表單載入在首頁上
<% Html.RenderPartial("LogonControl");%>不確定這是否與此有關,但我想我會提到它。
**編輯:**登錄表單的載入類似於 Twitter 登錄,點擊連結並在 jQuery 和 CSS 的幫助下載入表單
您的操作簽名將如下所示:
public virtual JsonResult ActionName() { var abcObj = new ABC{a=1,b=2}; return Json(abcObj); }
如果您使用的是 MVC 2,則必須返回如下內容:
return Json(your_object, JsonRequestBehavior.AllowGet);我在這裡找到了
對於不同的用法,這是我的程式碼。
查詢:
$(document).ready(function () { $("#InputDate").live('click', function () { var date = $("#InputDate").val(); if (date != "") { $.getJSON("/Home/GetNames", { date: $("#InputDate").val() }, function (data) { $("#ProviderName").empty(); // [...] }); }); } }); });和 C#
public JsonResult GetNames(string date) { List<Provider> list = new List<Provider>(); // [...] return Json(list, JsonRequestBehavior.AllowGet); }