2011-09-14 52 views
1

私がしようとしているのは、すべてのレコードをリストアップしてから、レコードを削除するオプションを提供することです。ユーザーがインデックスページのリンクの削除をクリックすると、削除確認ページ(MVCフレームワークによって作成されたビューの削除)にリダイレクトされます。削除ビューで[送信]ボタンをクリックすると、コントローラの削除アクションが表示されますオブジェクトを削除する必要があります。しかし、問題はオブジェクトを取得することですが、すべてのプロパティはnullに設定されています。以下はMVC削除ビューを使用してレコードを削除する

コードです:

//GET 
     public ActionResult DeleteUser (long id) 
     { 

      return View(_repository.GetUserById(id)); 

     } 

     //POST 
     [HttpPost] 
     public ActionResult DeleteUser (UserDTO user) 
     { 

      _repository.DeleteUser(user.UserId); 
      /
      return RedirectToAction("Index"); 
     } 

私は1つを提出することを期待していたがセカンド(HttpPost)メソッドが呼び出され、ユーザーは値が入りますが、それは起きていないクリックされます。..

私は何をしているのですか?

これはあなたのプロパティは、フォームポストのaoutである私の削除コードの表示

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<RepositoryPatternSample.DTOs.UserDTO>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    DeleteUser 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>DeleteUser</h2> 

<h3>Are you sure you want to delete this?</h3> 
<fieldset> 
    <legend>UserDTO</legend> 

    <div class="display-label">UserId</div> 
    <div class="display-field"><%: Model.UserId %></div> 

    <div class="display-label">Username</div> 
    <div class="display-field"><%: Model.Username %></div> 

    <div class="display-label">FirstName</div> 
    <div class="display-field"><%: Model.FirstName %></div> 

    <div class="display-label">LastName</div> 
    <div class="display-field"><%: Model.LastName %></div> 
</fieldset> 
<% using (Html.BeginForm()) { %> 
    <p> 
     <input type="submit" value="Delete User" /> | 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </p> 
<% } %> 

</asp:Content> 
+0

だろうのような 何かがあなたのビューのマークアップ+コードを表示します。あなたのDTOと同じ名前の値をポストバックしていないか、あなたのDTOが設定可能なプロパティなどを持っていないように思えます。 – Tejs

答えて

2

です。だからこそ、あなたはモデルnullを見るのです。 個人的にすべてのモデルプロパティを渡す代わりに、私はidだけを渡します。その

<% using (Html.BeginForm()) { %> 
<p> 
    <%: Html.HiddenFor(model=> model.UserId) %> 
    <input type="submit" value="Delete User" /> | 
    <%: Html.ActionLink("Back to List", "Index") %> 
</p> 
<% } %> 

とあなたのコントローラが

[HttpPost] 
public ActionResult DeleteUser (int userId) 
{ 
    _repository.DeleteUser(userId); 
    return RedirectToAction("Index"); 
} 
+0

このテクニックは私にとって同じ問題を解決しました。しかし、削除確認ページを表示するために既に "DeleteUser(int userId)"のようなものがあったので、このメソッドをHttpPostメソッドとして2回追加することはできませんでした。私は、HttpPostメソッドがDeleteUser(UserDTOユーザー)になる可能性があることを発見しました。 – sfuqua

関連する問題