모델이 컨트롤러로 전달되는 Ajax.BeginForm (전송 버튼 포함)을 사용할 때 알아 챘지만 Ajax.ActionLink를 사용할 때는 그렇지 않습니다. 통과했다 - 또는, 최소한 나는 그것을 두드리는 방법을 발견하지 못했다.ASP.NET MVC - Ajax.BeginForm vs Ajax.ActionLink
첫 번째 질문 : 어느 것이 더 좋은 경로인지 어떻게 결정합니까?
이제는 하나의 예제 시나리오를 조금 더 깊이 들어 보겠습니다. 몇 가지 간단한 데이터 형식 속성과 몇 가지 List 속성이있는 모델이 있습니다. Create/Edit View는 Html.BeginForm()으로 렌더링됩니다. 제출 버튼은 전체 뷰 모델을 반환합니다. 그러면 DB 모델을 통해 모든 데이터를 DB에 저장할 수 있습니다. 내가 말했던 것처럼 나는 약간의 목록 조각도 가지고있다. 예를 들어 일련의 확인란으로 렌더링하는 신용 카드 목록을 허용하고 제공되는 서비스 목록을 확인란 목록으로 렌더링했습니다. 이 모든 것은 Form Post에서 처리하기 쉽습니다. 그러나 기본적으로 자유형 텍스트 항목 인 하나의 목록이 있으며 추가 단추가있는 텍스트 상자와 삭제 단추가있는 모든 목록 항목이 필요합니다.
는/편집보기 만들기 내 일처럼 보인다 : 부분보기 보이는
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<RainWorx.FrameWorx.MVC.ViewModels.DirectoryEdit>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div class="Column12">
<div class="Shadow"></div>
<h2 class="h2row"><%= Model.PageTitle%></h2>
</div>
<% using (Html.BeginForm())
{%>
<%: Html.ValidationSummary(true)%>
<fieldset>
<%--<legend>Fields</legend>--%>
<div class="editor-label">
<%: Html.LabelFor(model => model.Name)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Name, new { style = "width:20em;" })%>
<%: Html.ValidationMessageFor(model => model.Name)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Address1)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Address1, new { style = "width:20em;" })%>
<%: Html.ValidationMessageFor(model => model.Address1)%>
</div>
...
<div class="editor-label">
<%: Html.LabelFor(model => model.LookupAccepts)%>
</div>
<div class="editor-field">
<hr />
<% foreach (var a in Model.MyAccepts)
{
if (a.Checked)
{ %>
<input type="checkbox" name="AcceptIDs" checked="checked" value="<%: a.ID %>" /> <%: a.Name%><br />
<% }
else
{ %>
<input type="checkbox" name="AcceptIDs" value="<%: a.ID %>" /> <%: a.Name%><br />
<% }
} %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.LookupServices)%>
</div>
<div class="editor-field">
<hr />
<% foreach (var a in Model.MyServices)
{
if (a.Checked)
{ %>
<input type="checkbox" name="ServiceIDs" checked="checked" value="<%: a.ID %>" /> <%: a.Name%><br />
<% }
else
{ %>
<input type="checkbox" name="ServiceIDs" value="<%: a.ID %>" /> <%: a.Name%><br />
<% }
} %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.MyLicenses)%>
</div>
<div class="editor-field">
<hr />
<% Html.RenderPartial("EditLicense", model: Model); %>
</div>
<div class="editor-label">
</div>
<div class="editor-field">
<input type="submit" value="Save" />
</div>
</fieldset>
<% } %>
</div>
<div>
<%: Html.ActionLink("Back to List", "Index")%>
</div>
</asp:Content>
같은 : 제어 언어 = "C#을"상속 = "System.Web.Mvc.ViewUserControl"@
<% %> <% @ 오기 스페이스 = "RainWorx.FrameWorx.MVC"%>
<%의 foreach는 (Model.MyLicenses에서 VAR 라이센스) {%>
<%} %>
이 방법을 설정하기위한 내 생각의 기차 꽤 똑바르다 (나는 그것이 어떻게해서든지있다라고 생각한다). 라이센스 섹션에서 아약스에게 뭔가가 있습니다. 주 모델에 대한 모든 정보를 잃지 않고 한 문자열을 추가하고 싶습니다. 그리고 추가가 완료되면 부분 뷰를 업데이트 된 List로 업데이트하려고합니다.
레이아웃 한 것보다 더 나은 방법이있을 수 있습니다. 그렇다면 레이아웃 해주세요. 지금 당장 (그리고 빨리) 파악하려고하는 주요 부분은 Ajax.ActionLink (및 내 확장 메소드)가 올바른 방향인지 여부입니다.
도우미 방식 대신 수동으로 수행하는 예가 있습니까? 헬퍼를 사용하는 것을 좋아하지 않는 이유는 무엇입니까? – Ciwan