1

ASP.NET MVC4 と Entity Framework を使用してイントラネット Web アプリを開発しています。データベースにあるすべての「人」を列挙するビューがあり、それらを編集または削除できます。モーダルフォームを使用して削除アクションを確認しようとしています(アクション「削除」を使用するため)。しかし、そのためには、削除したい人の ID を取得する必要があります。

例とドキュメントを読んだ後、削除したい人のIDを取得してアクションに使用する正しい方法が見つかりません。

私の削除アクション:

public ActionResult Delete(long id)
    {
        Person person = db.Persons.Single(p => p.Id_Person == id);
        if (person == null)
        {
            return HttpNotFound();
        }

        db.Persons.DeleteObject(person);
        db.SaveChanges();

        return RedirectToAction("Index");
    }

私の見解(およびモーダル):

    @model IEnumerable<BuSIMaterial.Models.Person>

@{
    ViewBag.Title = "Index";
}

@using PagedList.Mvc;
@using PagedList;

<link href="/Content/PagedList.css" rel="stylesheet" type="text/css" />


<h2>Index</h2>

<br />

<div class="group">
    <div class ="btn-group">
        <input type="button" value="New person" class="btn" onclick="location.href='@Url.Action("Create")';return false;"/>
        <input type="button" value="Download report" class="btn" onclick="location.href='@Url.Action("PersonReport")';return false;"/>
    </div>
</div>


@using (Html.BeginForm("SelectedPersonDetails", "Person"))
{  
    <form class="form-search">
        <label for="person">Search an employee : </label>
        <input type="text" id="tbPerson" name="tbPerson" class="input-medium search-query">
        <button type="submit" class="btn">Search</button>
    </form>
}


<br />

@Html.PagedListPager((IPagedList)ViewBag.PageOfPersons, page => Url.Action("Index", new { page }))

<br />

<table class="table table-striped">
<thead>
    <tr>
        <th>
            First Name
        </th>
        <th>
            Last Name
        </th>
        <th>
            National Number
        </th>
        <th>
            Start Date
        </th>
        <th>
            End Date
        </th>
        <th>
            Actions
        </th>
    </tr>
</thead>

<tbody>
@foreach (BuSIMaterial.Models.Person item in ViewBag.PageOfPersons)
{
    <tr>
        <td>
            @item.FirstName
        </td>
        <td>
            @item.LastName
        </td>
        <td>
            @item.NumNat
        </td>
        <td>
            @item.StartDate.ToShortDateString()
        </td>
        <td>
            @if (item.EndDate.HasValue)
            {
                @item.EndDate.Value.ToShortDateString()
            }
        </td>
        <td>
            <div class="btn-group">
                    <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
                        Actions
                        <span class="caret"></span>
                    </a>
                    <ul class="dropdown-menu">
                        @{

                            <li>@Html.ActionLink("Edit", "Edit", new { id = item.Id_Person })</li>
                            <li>@Html.ActionLink("Details", "Details", new { id = item.Id_Person })</li>
                            <li>@Html.ActionLink("Desactivate", "Desactivate", new { id = item.Id_Person })</li>
                            <li><a href="#myModal" data-toggle="modal" data-id="@item.Id_Person">Delete</a></li>
                        }
                    </ul>
             </div>
        </td>
    </tr>
}
</tbody>
<tfoot>
    <tr>
        <th>
            First name
        </th>
        <th>
            Last name
        </th>
        <th>
            National number
        </th>
        <th>
            Start date
        </th>
        <th>
            End date
        </th>
        <th>
            Actions
        </th>
    </tr>
</tfoot>
</table>

<div>@Html.PagedListPager((IPagedList)ViewBag.PageOfPersons, page => Url.Action("Index", new { page }))</div>

    <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h3 id="myModalLabel">Deleting an employee</h3>
        </div>
        <div class="modal-body">
        <p>Are you sure you want to delete this person? All the concerned data also will be deleted.</p>
        </div>
        <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
        <button class="btn btn-primary">Delete</button>
        </div>
    </div>


@section Scripts
{
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")
    @Styles.Render("~/Content/themes/base/css")

    <script type="text/javascript" language="javascript">
        $(document).ready(function () {
            $('#tbPerson').autocomplete({
                source: '@Url.Action("AutoComplete")'
            });
        })

        $('#myModal').modal(options)

    </script>
}

実行することでIDを取得できますが、data-id ="@item.Id_Person"それを使用して最終的にアクションを呼び出す方法がわかりません。アイデアはありますか?

4

1 に答える 1

1

jQuery などを使用して Ajax Delete を実行するのか、それとも ASP.NET MVC のみを使用するのかはわかりません。

Javascript を使用する場合は、data-id から ID を取得 し、 $.ajaxを使用してコントローラーに削除要求を送信します。

MVC と Ajax を使用する場合は、おそらくAjax.ActionLinkが必要だと思います

単に削除したい場合は RedirectToAction 、通常の方法で十分HTML.ActionLinkです

于 2013-04-10T13:43:16.770 に答える