2016-04-14 74 views
3

我有方法public void categoriesForm_DeleteItem(int categoryID) in public partial class Categories_View1 : System.Web.UI.Page。它仿照教程http://www.asp.net/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/shopping-cart的方法RemoveItem进行建模。在response.redirect后返回

我的方法中包含以下代码:

public void categoriesForm_DeleteItem(int categoryID) 
{ 
    /* some code ommited */ 
    if (c != null) 
    { 
     db.Categories.Remove(c); 
     db.SaveChanges(); 
     Response.RedirectToRoute("CategoriesList"); 
     //should I add return; here? 
    } 
    else 
    { 
     ModelState.AddModelError("NotFoundError", "Category not found."); 
     return; 
    } 
    /* code ommited */ 
} 

我应该Response.RedirectToRoute( “CategoriesList”)之后添加return;; ?

还有一个问题......我在教程中看到,方法RemoveItem返回int,返回代码的意图是什么?那个返回码在哪里有用?

+0

如果该方法在'if..else'子句之后结束,则没有。无需“返回”。如果不是,它取决于是否会有一些代码可以清除响应或以某种方式更改(罕见)。 – haim770

+0

从你链接的教程中得到的那个方法的sig是'public void RemoveItem(string removeCartID,int removeProductID)',no int returned。 – DrewJordan

+0

@DrewJordan我一定看过int返回类型的其他方法。 :/ – Willmore

回答

5

我应该添加返回;在Response.RedirectToRoute(“CategoriesList”)之后; ?

这取决于您是否希望代码返回。

首先,请注意Response.Redirect()Response.RedirectToRoute()之间的关键区别。前者(较旧)的方法默认放弃该线程,该线程抛出ThreadAbortException。因此,该语句之后的代码无论如何都不会被执行。后者(较新)的方法,但是,不是。这意味着任何代码预计执行。

鉴于这种情况,看看在你的榜样的最后一位......

/* code ommited */ 

,如果你不从该方法返回的代码将被执行。如果您不希望发生这种情况,则需要从方法返回或构造代码,以便在调用Response.RedirectToRoute()后不存在其他代码路径。