ユーザーが現在のエンティティの子エンティティを追加/削除できるシステムを実装しようとしていますが、Ajax.BeginForm
ヘルパーメソッドの使用に問題があります(これが初めての実際の使用です)。基本的に、送信ボタンをクリックしても、コントローラーで指定されたアクションが呼び出されません。
私は数時間検索しましたが成功しませんでした。以前に人々が抱えていた問題のほとんどは、特定のライブラリが参照されていないことが原因ですが、ここでは問題ではないと確信しています。
とにかく、ここに私のコードの重要な部分があります:
部分図
@using MyProject.Domain.Entities;
@model MyProject.WebUI.ViewModels.UserCustomerViewModel
<div id = "meh222">
@using (
Ajax.BeginForm("AddCustomer", "User",
new AjaxOptions() { UpdateTargetId = "meh222", HttpMethod = "Post" })
)
{
<label>Customers</label>
@*@Ajax.ActionLink("Add Customer", "AddCustomer", "User", new { userID = Model.UserID, customerID = 1001 },
new AjaxOptions() { UpdateTargetId = "meh222", HttpMethod = "POST" }, new { @class = "standardbutton" })*@
<fieldset>
<legend>CustomersLegend</legend>
@Html.HiddenFor(m => m.UserID)
@Html.DropDownListFor(m => m.Customers, new SelectList(Model.AllCustomers, "CustomerID", "Name"))
<p>
<input type="submit" value="Add Customer" />
</p>
</fieldset>
}
<table class="tbl2" id="tbl2">
<thead>
<tr>
<th>CustomerID</th> <th>Name</th> <th>Actions</th>
</tr>
</thead>
<tbody>
@if (Model != null)
{
foreach (Customer item in Model.Customers)
{
<tr>
<td>
@Html.DisplayTextFor(i => item.CustomerID)
</td>
<td>
@Html.DisplayTextFor(i => item.Name)
</td>
<td>
@Ajax.ActionLink("Delete", "DeleteCustomer", "User", new { userID = Model.UserID, customerID = item.CustomerID },
new AjaxOptions() { UpdateTargetId = "meh222" }, new { @class = "standardbutton" })
</td>
</tr>
}
}
</tbody>
</table>
</div>
メインビュー
<div>
@{ Html.RenderPartial("CustomerPartial", Model.CustomerVM); }
</div>
コントローラ
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult AddCustomer(UserCustomerViewModel vm)
{
return PartialView("CustomerPartial");
}
モデルを表示
public class UserCustomerViewModel
{
public int UserID;
public IEnumerable<Customer> Customers { get; set; }
public IEnumerable<Customer> AllCustomers { get; set; }
}
_Layoutのスクリプト
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
ほんの2、3のメモ:
- 私の部分的なビューを見ると、
Ajax.ActionLink
コメントアウトされていることがわかります。これは以前に使用したものでした(そして機能しました)が、CustomerIDをハードコーディングする必要があったAjax.BeginForm
ため、ViewModelのAllCustomersプロパティから入力されたDropDownListの値にアクセスできるように変更しました。 - 実際のコントローラーアクションには明らかにより多くの処理がありますが、アクションにブレークポイントを設定してもヒットしないかのように、ここでは問題にはなりません。
- スクリプトのリストを追加したのは、それが問題である場合に備えて、私が何を参照しているのかを人々が正確に理解できるようにするためです。
AddCustomer
送信がコントローラーのアクションにアクセスしない理由を誰かが知っていますか?
問題を適切に説明していない場合、または詳細情報が必要な場合は、お知らせください。詳細情報を提供するよう努めます。
どうもありがとう。
- - アップデート - -
Chromeのコンソールから取得したエラーデータ
これは、コンソールの「500InternalServerError」の下にあります。
d.support.ajax.d.ajaxTransport.send jquery-1.5.1.min.js:19
d.extend.ajax jquery-1.5.1.min.js:19
e jquery.unobtrusive-ajax.min.js:5
(anonymous function) jquery.unobtrusive-ajax.min.js:5
E jquery-1.5.1.min.js:19
d.event.handle jquery-1.5.1.min.js:19
d.event.add.k.handle.m jquery-1.5.1.min.js:19