我注意到當我使用Ajax.BeginForm(帶有一個提交按鈕)時,Model被傳遞給Controller,但是當我使用Ajax.ActionLink時,它不是通過了 - 或者至少我還沒有發現如何挖掘它。ASP.NET MVC - Ajax.BeginForm vs Ajax.ActionLink
第一個問題:你如何確定哪條路線更好?
現在,深入一個示例場景:我有一個具有幾十個簡單數據類型屬性和幾個List屬性的模型。創建/編輯視圖使用Html.BeginForm()進行渲染。提交按鈕返回整個視圖模型,然後我可以通過它並通過數據庫模型將所有數據保存到數據庫。就像我說的,我也有幾個List。例如,我接受了一系列信用卡列表,我將其呈現爲一系列複選框,提供的服務列表也顯示爲複選框列表。所有這些都很容易在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許可證){%>
<%}%>
我的想法火車這樣設置它是非常直接的(我認爲這是無論如何)。我在許可證部分只有Ajax的一些東西。我想添加一個接一個的字符串而不會丟失主模型的所有信息。添加完成後,我想用它的更新列表更新分部視圖。
可能有更好的方法來做到這一點比我的佈局,如果是的話,躺在我身上。我現在試圖弄清楚的主要部分(並且很快)是Ajax.ActionLink(以及我的擴展方法)是否是正確的方向。
你有一個例子,它是手動完成而不是幫助者的方式?還有你爲什麼不喜歡使用助手的原因? – Ciwan