モデルがコントローラに渡されるAjax.BeginForm(サブミットボタン付き)を使用したときに気付いたことがありますが、Ajax.ActionLinkを使用するとそうではありません渡された - 少なくとも私はそれを活用する方法を発見していない。ASP.NET MVC - Ajax.BeginForm vs Ajax.ActionLink
最初の質問:どちらが良いルートを決定するのですか?
ここで、1つのサンプルシナリオを少し深めてみましょう:数十のシンプルなデータ型プロパティといくつかのリストプロパティを持つモデルがあります。 Create/Editビューは、Html.BeginForm()でレンダリングされます。サブミットボタンはビューモデル全体を返します。そして、DBモデルを介してすべてのデータをDBに保存します。私が言ったように、私はリストの作品もいくつか持っています。たとえば、私は一連のチェックボックスとしてレンダリングするクレジットカードのリストを受け取り、提供されるサービスのリストはチェックボックスのリストとしてレンダリングされます。これらはすべてフォーム・ポストで取り扱いが簡単です。しかし、私は基本的にフリーフォームのテキストエントリであるListを1つ持っており、Addボタンの後ろにDeleteボタンが付いたListアイテムが続くテキストボックスを持っていたいと思っています。
は/編集ビューを作成マイ何かのようになります。部分的なビューが見えます
<%@ 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にライセンス・セクションで何かしかありません。メインモデルのすべての情報を失うことなく、別の文字列を追加したい。そして、追加が完了したら、部分ビューを更新されたListで更新したいと思います。
これを行うには、私がレイアウトしたものよりも良い方法があります。そうであれば、私の上に置いてください。私が今すぐ(そしてすぐに)把握しようとしている主な部分は、Ajax.ActionLink(およびそれに対する私の拡張メソッド)が正しい方向であるかどうかです。
ヘルパーの代わりに手作業で行う例がありますか?また、ヘルパーの使用が気に入らない理由は何ですか? – Ciwan