2

我试图弄清楚如何在我的应用程序的同一页面上拥有一个编辑功能和一个删除功能。目前我的控制器看起来像这样:

    [HttpPost]
    public ActionResult Edit(CodeTagViewModel codeTagViewModel, FormCollection collection)
    {
        if (ModelState.IsValid)
        {

            List<Tag> tagsToAdd = new List<Tag>();

            codeTagViewModel.Tags = db.Tags.ToList();
            foreach (Tag tag in codeTagViewModel.Tags)
            {
                if (collection[tag.TagID.ToString()].ToString().Contains("true"))
                {
                    tagsToAdd.Add(tag);
                }
            }

            codeTagViewModel.SelectedTags = tagsToAdd;

            Code code = db.Code.Find(codeTagViewModel.CodeID);
            MapModelToCode(codeTagViewModel, code);

            db.Entry(code).State = EntityState.Modified;
            db.SaveChanges();
            return View(codeTagViewModel);
        }
        return RedirectToAction("Index");
    }

    [HttpPost, ActionName("Delete")]
    public ActionResult Edit(CodeTagViewModel codeTagViewModel, FormCollection collection)
    {
        if (ModelState.IsValid)
        {

            List<Tag> tagsToAdd = new List<Tag>();

            codeTagViewModel.Tags = db.Tags.ToList();
            foreach (Tag tag in codeTagViewModel.Tags)
            {
                if (collection[tag.TagID.ToString()].ToString().Contains("true"))
                {
                    tagsToAdd.Add(tag);
                }
            }

            codeTagViewModel.SelectedTags = tagsToAdd;

            Code code = db.Code.Find(codeTagViewModel.CodeID);
            MapModelToCode(codeTagViewModel, code);

            db.Code.Remove(code);
            db.SaveChanges();
            return View(codeTagViewModel);
        }
        return RedirectToAction("Index");
    }

我的编辑视图中有两个按钮:

    <p>
        <input type="submit" value="Save" />
    </p>
    <p>
        <input type="submit" value="Delete" />
    </p>

我的视图模型如下所示:

public class CodeTagViewModel
{
    public List<Tag> Tags { get; set; }
    public List<Tag> SelectedTags { get; set; }        

    public int CodeID { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public DateTime DateAdded { get; set; }
    public DateTime LastUpdated { get; set; }
    public string Project { get; set; }
    public string CMS { get; set; }
    public int DotNetVersion { get; set; }
    public string Dependencies { get; set; }
    public string Author { get; set; }
    public string CodeFile { get; set; }
    public string TFSLocation { get; set; }

}

目前删除按钮什么也没做,它根本没有点击代码。

我是 MVC 的新手,并试图弄清楚它是如何处理所有背景的,所以任何帮助都将不胜感激。

编辑:我还研究了路由方面并输入:

    //
    // POST: /Code/Edit/5

在删除功能上方(与编辑功能相同),仍然没有。

4

5 回答 5

2

问题:

两个按钮都提交父表单,这在您的解决方案中可能相同。

背景资料:

如果您通过按钮提交(无论是哪个按钮),您的 HTML 元素都在表单元素内。浏览器将检查表单属性中给出的 url。

解决方案:

将 EDIT 放在单独的表单中 - 引用编辑 url(带有整个模型),然后创建一个单独的表单 - 引用删除 url - 带有 ModelID 和 Delete 按钮。(不是整个模型!)

更改删除功能,因此它只需要 ModelID 作为参数(而不是整个模型)。

就行了 :)

于 2013-01-24T13:14:49.663 回答
1

那是因为 theEditDeletebutton 都做同样的事情,它们只是发布表单。所以他们总是会发帖到同一个地方

您应该将删除按钮更改为 a ActionLink,然后将Delete方法更改为 a HttpGet,传入要删除的项目的 ID,然后检索并删除它。

像这样:

@Html.ActionLink("Delete", "Delete", "Code", new { CodeID = Model.CodeID })

然后在您的操作方法中:

[HttpGet]
public ActionResult Delete (int CodeID)
{
   //perform deletion
}

否则,您必须使用 Javascript 来根据单击的按钮自动更改表单的发布 URL,这很讨厌

于 2013-01-24T12:43:06.447 回答
0

您有两个具有相同名称和参数的 Action 方法。它不会引发编译错误吗?同样在视图中,您有两个提交按钮。您的表单指向哪个动作?

将您的表单指向 ActionMethod“编辑”。

将名称属性添加到您的提交按钮

 <p>
    <input type="submit" value="Save" name ="Edit"/>
</p>
<p>
    <input type="submit" value="Delete" name="Remove"/>
</p>

然后在控制器动作方法中:

 [HttpPost]
public ActionResult Edit(CodeTagViewModel codeTagViewModel, FormCollection collection)
{
    if (ModelState.IsValid)
    {
       if((collection["Edit"]=="Save") && (collection["Remove"] == null)
        {
           // perform edit operation
        }
        else if((collection["Edit"]== null) && (collection["Remove"] == Delete)
        {
           // perform delete operation
        }
    }
}
于 2013-01-24T11:31:30.713 回答
0

您是否尝试过将方法名称更改为删除?

    [HttpPost]
    public ActionResult Delete(CodeTagViewModel codeTagViewModel, FormCollection collection)
    {...

我认为没有理由将方法命名为 Edit 并将 ActionName 设置为 Delete。

于 2013-01-24T11:13:12.143 回答
0

尝试使用[HttpDelete]属性

于 2013-01-24T12:03:05.780 回答