2012-12-19 21 views
1

我的操作方法:asp.net的MVC後動作後沒有

[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來檢查數據發佈,並且我發現這個方法沒有任何內容到服務器。

有什麼建議嗎?

+6

您可能需要提供視圖的標記... – codingbiz

+0

你必須張貼的方法問題?你能否向我們展示正在發佈的表單代碼以及用戶參數如何解決? – marto

回答

1

您的表單沒有要回傳的值。您需要在表單中放置一些隱藏的輸入值來構建用戶或向表單添加隱藏的用戶標識並更改後處理方法。

後者將是我的首選方法如下:

[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"); 
} 

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> 
     @Html.HiddenFor(m => m.Id) @* <--- New input *@ 
     <input type="submit" value="Delete" /> | 
     @Html.ActionLink("Back to List", "Index") 
    </p> 
} 
-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或保留部分它在哪裏,只是把表單中的隱藏輸入。

然後,您需要更改操作以接受用戶標識並對數據庫執行查找。

+1

由於局部視圖只有顯示元素,因此這不起作用。 – NinjaNye

+0

公平點,但他可以很容易地添加一個隱藏的值 –