2009-11-16 2 views
3

다른 사람들에게 이것이 문제가되었다는 것을 알고 있지만, 아직 내 문제를 해결하는 것을 찾지 못했습니다.Json 결과가 처리되는 대신 브라우저에 "다른 이름으로 저장"대화 상자가 표시됩니다. ASP.NET MVC

라이트 박스 (컬러 박스)에 표시되는 부분보기가 있습니다. 그것은 간단한 형태입니다. 양식을 제출하고 약간의 데이터를 반환하기를 원합니다. 데이터는 후속 함수를 호출 할 때 사용되며, 기본 DIV가 "성공"메시지로 업데이트되도록합니다. 부분보기의 전체 코드는 다음과 같습니다.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Solution2.Models.Category>" %> 

<script type="text/javascript"> 
    $('propcatform').submit(function(e) { 
     e.preventDefault(); 

     $.ajax({ 
      type: "POST", 
      url: $(this).attr("action"), 
      data: $(this).serialize(), 
      dataType: "json", 
      contentType: "application/json; charset=utf-8", 
      success: function(data) { document.getElementById('main1').innerHTML = "Success"; }, 
      failure: function() { document.getElementById('main1').innerHTML = "Failure"; } 
     }) 
    }); 
    </script> 

    <% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "propcatform", name = "propcatform" })) 
     {%> 
     <div id="main1"> 
     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       <label for="CatTitle">Category Title:</label> 
       <%= Html.TextBox("CatTitle") %> 
       <%= Html.ValidationMessage("CatTitle", "*") %> 
      </p> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 
     </div> 

    <% } %> 

여기 내 컨트롤러 코드입니다. 이 코드는 테이블/데이터베이스에 양식 데이터를 성공적으로 추가한다는 점에서 작동합니다. "반환"라인은 정확히 무엇이되어야합니까? 현재 내가 실제로 내 부분보기 코드에서 결과 데이터 (내 "성공"매개 변수를 참조하더라도) 중 하나를 사용하지 않는

[AcceptVerbs(HttpVerbs.Post)] 
     public JsonResult Create(Category propcat) 
     { 

      Category resultcat = new Category(); 
      _db.Categories.InsertOnSubmit(propcat); 
      _db.SubmitChanges(); 
      resultcat = propcat; 
      return Json(new { CatID = resultcat.CatID, CatTitle = resultcat.CatTitle, message = "Category successfully created!" }); 
     } 

. 나는 그것을 작동 시키려고 노력 중이고 결과를 저장하라는 메시지를 표시하지 않는다.

감사합니다.

답변

5

일반적으로 정상적인 양식 제출을 통해 직접 Json을 사용자의 브라우저로 돌려 보내지 않을 것입니다. 내부적으로 소화하려는 정보를 전달하는 좋은 방법이지만 (위의 설명대로) 위의 내용을 수행하면 Json 데이터가 사용자에게 표시됩니다. Javscript - 유효한 HTML이 아니며 브라우저가 구성된 방식에 따라 "다른 이름으로 저장"대화 상자가 팝업 될 수 있습니다.

if (Request.IsAjaxRequest()) 
{ 
    return Json(.......); 
} 
else 
{ 
    return View(....); 
} 

을 ... 그리고 ActionResult에 함수 반환 유형을 변경 : 당신의 예에서

, 기본 동작은 확인이처럼 만들기 뷰를 반환하고 가질 수있는 시도 할 수 있습니다.

이렇게하면 페이지의 초기로드가 실제보기로 표시됩니다. Ajax는 관심있는 단지 JSON 데이터를 반환합니다 (페이지에있는 버튼) 같은 페이지에 대한 호출

UPDATE :.

작업은 업데이트를 제외하고 같은 페이지를 표시해야하는 경우 Json 콘텐츠, 제출 버튼을 사용하지 않는 것이 좋습니다. 일반 입력 버튼을 사용하고 클릭 동작을 jQuery.ajax 호출에 바인드하면됩니다. 데이터는 Create/POST 작업에서 수신되며 Ajax 호출의 success: 절에 따라 채워집니다.

+0

감사합니다. 내가하고 싶은 것을 가장 잘 처리 할 수있는 제안은 무엇입니까? 컬러 박스에 간단한 폼을 표시하고 처리하는 것입니까? 나는이 모든 것에 아주 새로운 사람이다. – johnnycakes

+0

업데이트가 수정되었습니다. –

1

저도 같은 문제를 했어 그리고 이것은 나를 위해 일한 :

return new JsonResult 
{ 
    ContentType = "text/html", 
    Data = new { foo = 1, bar = "Something" } 
}; 

가 명시 적으로, 새로운 JsonResult 객체를 생성 ContentType을 설정하고 대신 Json 방법을 사용하는 것을 돌아갑니다.

+1

감사합니다.하지만보기에서 응답을 어떻게 다시 처리합니까? – johnnycakes

+0

가지고 계신 것이 좋습니다. 내 코드가 효과가 없습니까? – JulianR

+0

아니요, 브라우저에 출력을 썼습니다. – johnnycakes

-2

Firefox + Firebug를 사용하십시오.

관련 문제