1

私の行動方法:

    [HttpPost, ActionName("Delete")]
    [RequiredPermissions(RequiredPermissionName, Operation.Delete)]
    public ActionResult DeleteConfirmed(User userWhoGone)
    {
        _db.Users.Remove(userWhoGone);
        _db.SaveChanges();

        this.TempData["msg"] = "Deleted User Id " + userWhoGone.Id;
        return RedirectToAction("Index");
    }

Delete.cshtml

@model NewsMonitoringWeb.Database.Models.User
@{
    ViewBag.Title = "User Delete";

<h2>User Delete</h2>
<h3>Are you sure you want to delete this user?</h3>

@Html.Partial("_PartialUser")

@using (Html.BeginForm()) {
    <p>
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}

_PartialUser.cshtml

@model NewsMonitoringWeb.Database.Models.User

<fieldset>
    <legend>User</legend>

    <div class="display-label">User Role</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.UserRole.Name)

    </div>

    <div class="display-label">FirstName</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.FirstName)
    </div>

    <div class="display-label">LastName</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.LastName)
    </div>

    <div class="display-label">Email</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.Email)
    </div>

    <div class="display-label">Is Contributor</div>
    <div class="display-field">
        @Html.DisplayFor(model => model.IsContributor)
    </div>
</fieldset>

投稿されたデータを確認するためにchromeを使用しましたが、このメソッドはサーバーに何も投稿しないことがわかりました。

なにか提案を?

4

2 に答える 2

1

フォームにはポストバックする値がありません。非表示の入力値をフォームに入力してユーザーを作成するか、非表示のユーザー ID をフォームに追加してポスト アクション メソッドを変更する必要があります。

後者は、次のように私の好ましい方法です。

[HttpPost, ActionName("Delete")]
[RequiredPermissions(RequiredPermissionName, Operation.Delete)]
public ActionResult DeleteConfirmed(int userIdWhoGone)
{

    _db.Users.RemoveById(userIdWhoGone); // You may need to create this.
    // Atlernatively, get the user by id then call 'Remove()
    var user = _db.User.Find(userIdWhoGone);
    _db.Users.Remove(user);


    _db.SaveChanges();

    this.TempData["msg"] = "Deleted User Id " + userIdWhoGone;
    return RedirectToAction("Index");
}

削除.cshtml

@model NewsMonitoringWeb.Database.Models.User
@{
    ViewBag.Title = "User Delete";

<h2>User Delete</h2>
<h3>Are you sure you want to delete this user?</h3>

@Html.Partial("_PartialUser")

@using (Html.BeginForm()) {
    <p>
        @Html.HiddenFor(m => m.Id) @* <--- New input *@
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}
于 2012-12-19T12:21:35.803 に答える
-1

あなたは現在、何も投稿していません。ユーザーのパーシャルがフォームの外側にあります。

フォームにあるのはボタンとリンクだけです。

パーシャルをフォーム内に移動する必要があります。

したがって、次のようになります。

@model NewsMonitoringWeb.Database.Models.User
@{
ViewBag.Title = "User Delete";

<h2>User Delete</h2>
<h3>Are you sure you want to delete this user?</h3>



@using (Html.BeginForm()) {
@Html.Partial("_PartialUser")    
<p>
    <input type="submit" value="Delete" /> |
    @Html.ActionLink("Back to List", "Index")
</p>
}

編集

ユーザー ID を含むパーシャルに非表示の入力を追加するか、パーシャルをそのままにしてフォーム内に非表示の入力を配置する必要があります。

次に、アクションを変更してユーザー ID を受け入れ、データベースを検索する必要があります。

于 2012-12-19T12:17:45.540 に答える