使用MVC删除视图删除记录

时间:2011-09-14 08:34:53

标签: asp.net-mvc controller

我要做的是列出所有记录,然后提供删除记录的选项。当用户点击索引页面上的删除链接时,他被重定向到删除确认页面(由MVC框架创建的删除视图),现在我期待的是当我点击删除视图上的提交按钮时它将转到我的控制器删除操作与需要删除的对象。但问题是我得到一个对象,但所有属性都设置为null。

以下是代码:

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

我期待点击一个提交,然后将调用第二个(HttpPost)方法,用户将填充值,但这不会发生..

谁能告诉我我做错了什么?

这是我的删除视图代码

<%@ 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>

1 个答案:

答案 0 :(得分: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");
}