2014-05-12 1 views
1

내 앱에서 return Json(new { url = Url.Action("MyAction", new { param = 1 }을 광범위하게 사용했습니다. 최근에 MVC 4 응용 프로그램을 MVC 5로 마이그레이션했지만 여전히 작동하지만 Visual Studio 2013 업데이트 2 (MVC 5, EF 6.1 및 ID 2 응용 프로그램 템플릿)로 새 MVC 응용 프로그램을 빌드하면 현재 리디렉션에 실패하고 json 브라우저로 전송됩니다새로운 MVC 5 앱에서 Json Url.Action이 실행되지 않습니다.

Do you want to open or save 23xdf543v.json (28 bytes) from localhost

(신원 2 설치를 얻으려면 나는 새로운 MVC (5) 응용 프로그램을 만들고 그것으로 내 모든 MVC 4 응용 프로그램 파일을 복사하고 작업을 진행하게 리팩토링).

JSON을 열면 url의 형식이 제대로 지정되어있는 것처럼 보입니다. 이상한 것은 그것이 MVC에 MVC 4 마이그레이션 5 앱 아니라 새로이 템플릿 MVC 5 앱 작동이다

{"url":"/MyController/MyAction/1"}. 

(이 예에서는 시켜라는 MyController에이다).

작업 :

public ActionResult Phn2Add(PhoneVm vM) 
{ 
    if (ModelState.IsValid) 
    { 
    _db.Phones.Add(vM.Phone); _db.SaveChanges(); 
    return Json(new { url = Url.Action("Details", new { id = vM.DetailsId }) }); 
    } 
    ModelState.AddModelError(string.Empty, ErMsInvldEdt); 
    PhTyDrpDwn(); 
    return PartialView("Add_Del/_PhnAdd", vM); 
} 

보기 : 다른

@model MyApplicaiton.ViewModels.PhoneVm 
@{ ViewBag.Title = "Add"; } 
<script type="text/javascript"> 
    var onSuccess = function (result) { if (result.url) { window.location.href = result.url; } } 
</script> 
<div id="PhnAdd"> 
    <div style="padding-left:17px"> 
    <h3>Add a @Model.Msg? @Html.ActionLink("CANCEL", null, new { id = Model.DetailsId }) </h3> 
    </div> 
    @using (Ajax.BeginForm(@Model.ActnNm, new AjaxOptions 
    { 
     OnSuccess = "onSuccess", UpdateTargetId = "PhnAdd", HttpMethod = "Post" 
    })) 
    { @Html.AntiForgeryToken() @Html.ValidationSummary(true) 
     <fieldset>  <legend></legend><br /> 
     @Html.HiddenFor(m => m.Phone.PersonId) @Html.HiddenFor(m => m.DetailsId) 
     @Html.HiddenFor(m => m.ActnNm) @Html.HiddenFor(m => m.Msg) 
     <table> 
      <tr> 
      <th><span class="editor-label">Number: (7573334444)</span></th> 
      <td> 
       <span class="editor-field">@Html.EditorFor(m => m.Phone.Number) @Html.ValidationMessageFor(m => m.Phone.Number) </span> 
      </td> 
      </tr> 
      <tr> 
      <th><span class="editor-label">Type: Land or Mobile</span></th> 
      <td><span class="editor-field">@Html.DropDownList("Phone.Type", (IEnumerable<SelectListItem>)ViewBag._PhTyp) 
              @Html.ValidationMessageFor(m => m.Phone.Type) </span> 
      </td> 
      </tr> 
     </table> 
     <input type="submit" value="Add" /> 
     </fieldset> 
    } 
    </div> 

합니까 MVC 5 핸들 Url.Action? OnSuccess의 자바 스크립트 처리에 몇 가지 변경 사항이 있습니까? 변경해야 할 설정이 있습니까?

+0

돌아온 JSON이 나에게 잘 보입니다. 전에는 어떻게 된 걸까요? Ajax 호출로 반환 했습니까? 이제 브라우저로 직접 보냈습니까? –

+0

내 의견에 AJax.BeginForm과 관련하여 수많은 컨트롤러 액션에서 사용되고 있습니다. 이 코드는 MVC 5로 마이그레이션 된 MVC 4와 새롭게 템플리트 된 MVC 5 애플리케이션간에 동일합니다. 나는 아무것도 변하지 않았다. – Joe

+0

그것은 합산하지 않습니다. 아주 간단한 코드 작성, 하나의 컨트롤러 동작 (또는 초기보기를 포함하는 두 개) 및 하나의보기를 공유 할 수 있습니까? 제 생각에 여러분은 json을 Ajax가 아닌 페이지로 제공하려고합니다. 그러나 당신이 그것이 모두 같다고 말했기 때문에, 샘플은 진행되고있는 것을 보여줄 수 있습니다. –

답변

0

Visual Studio 2013, 업데이트 2, MVC 템플릿은 jquery.unobstrusive-ajax.js 스크립트를 설치하지 않습니다. BundleConfig에 추가했지만 스크립트 폴더에는 설치되지 않았습니다. 일단 설치되면 AjaxOnSuccess가 작동하기 시작합니다.

0

이 두 스크립트는 VS2013의 템플릿에서 삭제되었습니다. 저는 편집자/템플릿 팀과 이야기를 나누었습니다. 계획에 대한 더 많은 정보를 얻을 때 여기에서 업데이트 할 것입니다.

+0

당신 RC가 설치되어있는 당신의 정확. 방금 업데이트 2의 최종 릴리스를 설치했으며 MVC 템플릿은 여전히 ​​jquery.unobstrusive-ajax.js 스크립트를 설치하지 않습니다. – Joe

+0

그래, 내가 (jQuery 유효성 검사) 제거 된 다른 스크립트를 혼란 스러웠다. 템플릿 팀의 관련자들과 이야기를 나누었고, 우리는 그것을 다시 가져올지를 살펴볼 것입니다. –

+0

템플릿은 jquery.validate.js를 설치하지만 jquery.unobstrusive-ajax.js 및 jquery-ui.js는 설치하지 않습니다. 수동으로 설치해야했습니다. – Joe

관련 문제