gpt4 book ai didi

asp.net-mvc - MVC (EF 4.1) 中的 "Delete"post 方法中缺少某些内容

转载 作者:行者123 更新时间:2023-12-01 08:01:31 25 4
gpt4 key购买 nike

按照这个例子.. http://msdn.microsoft.com/en-us/data/gg685489

我遇到了删除功能的问题。

[HttpPost]
public ActionResult Delete(int id, Blog blog)
{
try
{
using (var db = new BlogDataEntities())
{
//Having issue here.. as soon as the next line is run in debug
//mode .. it goes to catch.. and returns a view with null values.

db.Entry(blog).State = System.Data.EntityState.Deleted;
db.SaveChanges();
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}

在我检查“博客”的参数中,没有得到需要删除的实际博客模型。所有其他方法都可以正常工作(编辑、删除(获取)..等..但删除帖子失败。我错过了什么吗?提前感谢您的帮助。

编辑:

查看代码

@model DBFirstMVC.Models.Blog

@{
ViewBag.Title = "Delete";
}

<h2>Delete</h2>

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

<div class="display-label">Title</div>
<div class="display-field">@Model.Title</div>

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

编辑 2: View 中的非 Razor 代码:

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

编辑 3:(我在 aspx 中试过)

<% using (Html.BeginForm()) { %>
<p>

<%=Html.DisplayForModel();%> //Tried Html.EditorForModel also..
<input type="submit" value="Delete" /> |
<%: Html.ActionLink("Back to List", "Index") %>
</p>
<% } %>

最终编辑(更正的解决方案)

@model DBFirstMVC.Models.Blog

@{
ViewBag.Title = "Delete";
}

<h2>Delete</h2>

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

@using (Html.BeginForm()) {
<p>
<fieldset>
<legend>Blog</legend>

<div class="display-label">Title</div>
<div class="display-field">@Model.Title</div>

<div class="display-label">BloggerName</div>
<div class="display-field">@Model.BloggerName</div>

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

最佳答案

上下文可能没有您博客的条目,因为它没有附加到上下文。

您可能需要先检索博客,然后使用 Entry 方法将其标记为已删除:

[HttpPost]
public ActionResult Delete(int id, Blog blog)
{
try
{
using (var db = new BlogDataEntities())
{
// retrieve the blog from the database
var realBlog = db.Blogs.Find(blog.Id);

// nothing to do here, just redirect
if( realBlog == null )
return RedirectToAction("Index");

// since you have the entity just do this instead:
db.Blogs.Remove(realBlog);
db.SaveChanges();
}

return RedirectToAction("Index");
}
catch( Exception )
{
return View();
}
}

不过,我不太同意使用您的实体作为模型的想法。您应该改用 View 模型。

编辑

既然你现在说 Blog 没有被传递,试试这个:

@model Blog

@using ( Html.BeginForm() )
{
@Html.EditorForModel()

<input type="submit" value="Delete" />
}

您实际上并没有向模型绑定(bind)器提供构建模型所需的任何细节。

关于asp.net-mvc - MVC (EF 4.1) 中的 "Delete"post 方法中缺少某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9485131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com