「Filter」ボタンがあるいくつかの検索フィルターを表示する「ContactsFilters」という部分ビューがあります。
@model AppName.Mvc.ViewModels.VmContactsFilters
<script language="javascript" type="text/javascript">
$.ajaxSetup({ cache: false });
function btnFilter_onclick() {
// the below post, gets received by the action but the form data are not posted.
$.ajax({
url: "/ControllerName/ContactsList",
type: 'POST',
context: this,
error: function (xhr) {
alert(xhr);
},
success: function (data) {
$('#ContactsListContainer').html(data);
}
});
return false;
}
</script>
<fieldset>
<legend>Filter Contacts</legend>
<div>
@Html.HiddenFor(m => m.UserId)
<div>
<table>
<tr>
<th>Company:</th>
<td>@Html.TextBoxFor(m => m.CompanyName)</td>
<th>First name:</th>
<td>@Html.TextBoxFor(m => m.FirstName)</td>
</tr>
<tr>
<th></th>
<td colspan="3">
<input id="btnFilter" type="submit" value="Filter" onclick="btnFilter_onclick();" />
</td>
</tr>
</table>
</div>
</div>
</fieldset>
<div id="ContactsListContainer"></div>
ボタンがクリックされると、ポストによって以下のアクションが呼び出され、「ContactsList」という別の部分ビューからの結果が「ContactsFilters」ビューの「ContactsListContainer」div にロードされます。
[HttpPost]
public ActionResult ContactsList(VmContactsFilters vmContactsFilters)
{
var result = db.Contacts.Where(c => c.UserId == vmContactsFilters.UserId).ToList();
// also filtering on other columns
return PartialView(result);
}
問題は、会社名、ユーザー ID などの投稿データが返されないことです。
データをサーバーに戻す方法は?
「data : {}」を使用する方法が 1 つあることはわかっていますが、テキスト ボックスが 10 個以上あります。post と言うだけで、すべてが MVC マジックによって投稿されることを願っていました。
フォーム投稿を定義すると、オブジェクトが投稿されることはわかっていますが、その場合、同じページではなく別のページに新しいビューが表示されるため、div を設定できません。