微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET MVC 2 - 传递给删除方法控制器的对象为空

如何解决ASP.NET MVC 2 - 传递给删除方法控制器的对象为空

我正在尝试从数据库删除一个条目。 这是我的控制器方法

   public ActionResult Delete(Models.CommentEntry entry)
    {
        _db.Entries.Remove(entry);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

这是我的 .cshtml:

         @foreach (var entry in ViewBag.Entries)
            {
                <section class="contact">
                    <header>
                        <h3>@entry.Message</h3>
                    </header>
                    <p>
                        Posted by @entry.Name on @entry.DateAdded.ToLongDateString()
                    </p>
                </section>
                <form method="post" action="Delete">
                    <input type="submit" value="Delete" class="btn btn-danger" />
                </form>
            }

Website

这就是现在的样子。如您所见,每当用户按下删除键时,我都希望删除相应的评论。我正在使用 foreach 来访问它们,并希望这样我可以将注释对象传递给控制器​​。

Dump

正如你所看到的,对象没有被传递下去并且总是有初始值,因此我得到了一个转储。我的错误在哪里?

谢谢。

解决方法

您必须在表单标签之间输入入口参数。 对于入口模型中的每个参数,声明一个带有名称和值的输入标签。 将表单部分代码更改如下:

<form method="post" action="Delete">
<input type="hidden" name="Message" value="@entry.Message" /> 
<input type="hidden" name="Id" value="@entry.Id" />
 .
 .
<input type="submit" class="btn btn-danger" />
</form>

有关向控制器发送数据的更多信息,您可以阅读这篇文章: https://www.c-sharpcorner.com/UploadFile/3d39b4/getting-data-from-view-to-controller-in-mvc/

,

首先,我认为您是从 laravel 来到这里的(我从您的行动中了解到)。 这是我的代码,我解释了一切:

public async Task<ActionResult> Delete(int Id)
{
    var entry = _db.Entries(x=>x.Id == Id);
    if(entry != null)
    {
        _db.Entries.RemoveAsync(entry);
        _db.SaveChangesAsync();
    }
    return RedirectToAction("Index");
}

现在您也必须修复您的 cshtml 文件,以便将 Id 发送到此操作

@foreach (var entry in ViewBag.Entries)
{
    <section class="contact">
        <header>
            <h3>@entry.Message</h3>
        </header>
        <p>
            Posted by @entry.Name on @entry.DateAdded.ToLongDateString()
        </p>
    </section>
    <form  action="Delete">
        <input type="hidden" name="Id" value="@entry.Id" />
        <input type="submit" value="Delete" class="btn btn-danger" />
    </form>
}
,

这个没有错的问题

colorInput.addEventListener("input",()=>{ /*code*/ })

请阅读此https://www.w3schools.com/tags/tag_form.asp

,
   // you can use entryId
    
     public ActionResult Delete(int entryId)
        {
             var entry = _db.Entries(x=>x.Id == entryId);
            _db.Entries.Remove(entry);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
//Get the Id From SubmitButton in View
    @Html.ActionLink("Delete","ControllerName",new{entryid==entry.Id})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。