내 앱에서 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
의 자바 스크립트 처리에 몇 가지 변경 사항이 있습니까? 변경해야 할 설정이 있습니까?
돌아온 JSON이 나에게 잘 보입니다. 전에는 어떻게 된 걸까요? Ajax 호출로 반환 했습니까? 이제 브라우저로 직접 보냈습니까? –
내 의견에 AJax.BeginForm과 관련하여 수많은 컨트롤러 액션에서 사용되고 있습니다. 이 코드는 MVC 5로 마이그레이션 된 MVC 4와 새롭게 템플리트 된 MVC 5 애플리케이션간에 동일합니다. 나는 아무것도 변하지 않았다. – Joe
그것은 합산하지 않습니다. 아주 간단한 코드 작성, 하나의 컨트롤러 동작 (또는 초기보기를 포함하는 두 개) 및 하나의보기를 공유 할 수 있습니까? 제 생각에 여러분은 json을 Ajax가 아닌 페이지로 제공하려고합니다. 그러나 당신이 그것이 모두 같다고 말했기 때문에, 샘플은 진행되고있는 것을 보여줄 수 있습니다. –