Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从视图中运行一个方法,并让它返回到发送页面,该页面需要一个基于类别ID的查询字符串,但它没有被发送?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 如何从视图中运行一个方法,并让它返回到发送页面,该页面需要一个基于类别ID的查询字符串,但它没有被发送?

C# 如何从视图中运行一个方法,并让它返回到发送页面,该页面需要一个基于类别ID的查询字符串,但它没有被发送?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,作为预告,我最近转移到了.net下的MVC,因此一些术语可能有点不合适&我尝试在我可以的地方删除不相关的代码片段 在web应用程序中,从我的视图中,我有一个输出从视图模型传递的项的循环。视图模型由特定类别的项填充,类别ID通过查询字符串发送 @model Web.Models.ItemViewModel [html only - removed for brevity] @foreach (var item in Model.Items) { <tr>

作为预告,我最近转移到了.net下的MVC,因此一些术语可能有点不合适&我尝试在我可以的地方删除不相关的代码片段

在web应用程序中,从我的视图中,我有一个输出从视图模型传递的项的循环。视图模型由特定类别的项填充,类别ID通过查询字符串发送

@model Web.Models.ItemViewModel

[html only - removed for brevity]

@foreach (var item in Model.Items)
{
     <tr>
          <td>@item.Name</td>
          <td><a href="@Url.Action("/DeleteItem", new {id = item.ID})">remove</a></td>
     </tr>
}
当DeleteItem方法完成时,它返回到索引,尽管没有querystring,但我收到一个空白页或一个错误页,说明类别ID未设置。理想的索引字符串如下所示

www.domain.com/Items/ItemCategory?id=00000000-0000-0000-0000-000000000000&Type=MyCategoryType
我尝试过各种不同的方法,但都没有成功,包括:

返回到URI引用,最终尝试返回不存在的删除页本身

在删除项目之前,获取其类别ID和类别类型-这是可行的,但是单个项目可能属于多个类别和类别类型,因此这是一种不可靠的方法-因为它可能最终将最终用户从类别A发送到类别B,并以完全不同的视图

将相关数据传递给删除方法,例如:

 public ActionResult DeleteItem (Guid id, Guid SendingCategoryID, ItemType SendingCategoryItemType)
其中1似乎传递了很多不必要的数据—其中一些数据在没有DB调用的情况下无法立即使用,而2在应用程序的生命周期内将变得完全不可维护。一个项目可以属于多个类别或类别类型,另外一个类别可以属于多个类别类型。我甚至无法想象用这种技术调试一个问题会有多困难

我的下一个方法是在不离开页面的情况下调用该方法。我完全不知道如何做到这一点,任何帮助或建议,即使是在如何文字我的问题,以获得一个体面的结果,从谷歌,我可以继续研究将是非常有帮助和感谢


非常感谢任何帮助或指导。

在我看来,在您的情况下,通过类别或某种形式的更一般的返回位置参数是完全有效的。当然,您可以通过AJAX执行删除操作,而不必离开页面,但附加参数不应成为您这样做的理由

如果有其他参数,我假设您使用RedirectToAction。

而不是在没有必要数据的情况下显示索引视图,您可能希望重定向到索引操作:

另外,请确保DeleteItem仅在HTTP POST请求下执行。更改数据只能在POST请求时发生。这也意味着你的索引页面中的删除链接将需要成为一个表单来完成文章

 public ActionResult DeleteItem (Guid id, Guid SendingCategoryID, ItemType SendingCategoryItemType)
[HttpPost]
public ActionResult DeleteItem(Guid id)
{
    ItemService.Delete(id);

    return RedirectToAction("Index");
}