2010-11-29 3 views
0

Обновление: Я полностью удалил datatype = "html" и надеюсь, что возвращаемое значение будет всегда оцениваться - но сейчас ничего не происходит.Asp.net MVC 2 - Возвращенный объект Json не подхвачен в javascript?

Я также добавил код, который вызывает функцию «openModal». Он находится в LogOn UserControl, содержащемся в Site.Master. Надеюсь, что это очищает несколько вещей

Похоже, от контроллера не возвращают объект JSON обратно в АЯКСЕ вызывающего, что-то теряется где-то - я никогда не бил, что разрыв point..it пропускает его полностью

у меня есть простой модальных для входа в систему, так что я называю LogOn действий, как это:

<div id="logonForm">   
    <% using (Ajax.BeginForm("LogOn", "Account", new AjaxOptions{UpdateTargetId = "logonForm"})) { %> 
      //my login form 
<% } %> 
</div> 

И действие выглядит следующим образом:

 [HttpPost] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     //success login 
     if (Request.IsAjaxRequest()) 
      return Json(new { Url = Url.Action("Index", "Home") }, JsonRequestBehavior.AllowGet); 
     else 
      return RedirectToAction("Index", "Home");        
    } 

На этом этапе retursthe нового объекта JSON с URL-адресом в пользовательском элементе управления (в Site.Master), в JavaScript здесь:

<script type="text/javascript"> 
     function openModel() { 
      $.ajax({ 
       type: "get", 
       url: '/Account/LogOn', 
       contentType: "application/x-www-form-urlencoded;charset=utf-8", 
       // async: true, 
       success: function (result) { 
        debugger; 
        if (typeof result == 'string') { 
         $.modal(result, { 
          closeHTML: "", 
          containerId: "login-container", 
          overlayClose: true 
         }); 
        } 
        else if (result.Url) { 
         debugger; 
         window.location.href = result.Url; 
        } 
       } 
      }); 

     } 

</script> 

<% if (Request.IsAuthenticated) { %> 
     Welcome <b><%: Page.User.Identity.Name %></b>! 
     <%: Html.ActionLink("Log Out", "LogOff", "Account") %>   
<% } else { %> 
     <a href="javascript:openModel()">Log In</a> 
<% } %> 

... но Javacript никогда не ловит it..i не может посмотрите, что находится в «результате», на экране отображается «{Url: /}» - просто странное поведение

Что мне не хватает? отладчик; Перерыв срабатывает, когда я первый нажмите на ссылку, но когда я пытаюсь отправить форму, он идет через Контролер LogOn - пытается вернуть объект JSON, но никогда не возвращается к JavaScript

Благодаря много

+0

Где `openModel` дозвонились из? – andynormancx 2010-11-29 17:20:20

+0

`dataType:" html ",` эта строка кажется неправильной ...это не должно быть `dataType:" json ",` – 2010-11-29 17:24:30

+0

Это следующий вопрос. http://stackoverflow.com/questions/4293765/asp-net-mvc-login-modal-problems-redirect-goes-to-modal/4293904 – 2010-11-29 17:38:08

ответ

0

JQuery не будет обрабатывать вызов как возвращающий json, потому что вы сказали, что он возвращает html. Вам необходимо изменить dataType на json.

Однако неясно, где вы ожидаете, от openModel. Код, как он, будет использовать код Microsoft AJAX и вставить возвращаемые данные на страницу, поэтому вы видите, что ваш json появился на странице.

0

dataType: "html", должно быть dataType: "json",, и это должно решить проблему.

-1

Ну JQuery никогда не будет запускать success обратный вызов, так как вы указали dataType: "html",, поэтому он будет ждать ответа text/html, но вы передаете JSON.

Вы должны использовать "json" как dataType.

См: http://api.jquery.com/jQuery.ajax/

0

Вам необходимо перезаписать представить нажмите для вызова пользовательской функции JQuery Ajax. Сейчас он будет использовать Microsoft ajax. Вот почему ваша функция ajax никогда не вызвана.

ли что-то вроде:

$('form').unbind('submit').submit(function(){ 
    $.ajax({ type:'post', url: '/Account/LogOn', data: $(this).serialize(), 
     success: function(){ 
      if (result.Url) 
       window.location.href = result.Url; 
     } 
    }); 
});