これについてはかなりの数の投稿を見てきましたが、おそらく行く必要があると思われるルートをたどる前に、ベストプラクティスを理解しようとしたかったのです。データベースに新しいレコードを挿入した後、ビューを更新しようとしています:
かなり基本的なセットアップ:
<table id="grid-basic" class="table table-condensed table-hover table-striped">
<thead>
<tr>
<th data-column-id="role_id">ID</th>
<th data-column-id="description">Description</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">Commands</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.Name</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<td></td>
<td style="padding-right: 20px;">
<div id="add-role-text-group" class="form-group">
<input id="add-role-text" type="text" class="form-control input-md" placeholder="Add Role" data-container="body" title="A role description must be entered."/>
<span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
</div>
</td>
<td style="vertical-align: middle;"><button type="button" class="btn btn-xs btn-default command-add"><span class="fa fa-plus"></span></button></td>
</tr>
</tfoot>
</table>
私のC#コード
// GET: Application Role Management
[Route("role")]
public ActionResult Role()
{
return View(RoleManager.Roles.ToList<IdentityRole>());
}
[HttpPost]
[Route("addrole")]
public async Task<ActionResult> AddRole(string description)
{
IdentityRole role = new IdentityRole();
role.Name = description;
var result = await RoleManager.CreateAsync(role);
if (result.Succeeded)
{
return RedirectToAction("role");
} else {
return RedirectToAction("Error");
}
}
AJAX 投稿
$.ajax({
type: "POST",
url: "@Url.Action("AddRole")", // the method we are calling
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ description: $element.val() }),
dataType: "json"
});
ビューをロードし、システム内のすべてのロールを取得して、グリッドに表示します。新しいロールを挿入するためのインライン行があります。新しい役割を入力し、プラス ボタンをクリックします。AddRole ルートに POST します。モデルを更新してグリッドを更新するにはどうすればよいですか?
私が見てきたことから、挿入を実行し、すべてのロールを再度取得し、「成功」イベントでグリッドを更新する必要があります。これは本当ですか?それとも、ASP.net経由でこれを行うためのより従来のMVC手段がありますか? 明らかに、Knockout などを使用してその程度まで進むこともできますが、この方法でビューを更新する手段があるかどうか疑問に思っています。