2016-04-14 13 views
3

public partial class Categories_View1 : System.Web.UI.Pageにはpublic void categoriesForm_DeleteItem(int categoryID)という方法があります。チュートリアルhttp://www.asp.net/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/shopping-cartからメソッドRemoveItemをモデルにしています。返信後の返信

私の方法は、次のコードが含まれます。

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;を追加する必要があります。 ?

もう1つの質問...チュートリアルでは、RemoveItemを返すというチュートリアルを見ましたが、その戻りコードの目的は何ですか?そのリターンコードはどこに便利ですか?

+0

このメソッドが 'if..else'節の後で終了する場合は、noを返します。 'return'の必要はありません。そうでない場合は、応答を消去したり、何らかの方法で変更したりできるコードがあるかどうかによって異なります(まれです)。 – haim770

+0

あなたがリンクしているチュートリアルのそのメソッドのsigは 'public void RemoveItem(string removeCartID、int removeProductID)'です。intは返されません。 – DrewJordan

+0

@DrewJordan私は他の方法でint型の戻り値を見たに違いありません。 :/ – Willmore

答えて

5

リターンを追加する必要があります。 Response.RedirectToRouteの後( "CategoriesList"); ?

これは、コードを返すかどうかによって異なります。

まず、Response.Redirect()Response.RedirectToRoute()の重要な違いに注意してください。以前の(より古い)メソッドはデフォルトでスレッドを打ち切り、ThreadAbortExceptionをスローします。とにかくそのステートメントの後のコードは実行されません。しかし、後者の方法()はではありません。つまり、の後のコードはとなるでしょう。あなたがメソッドから返されない場合は、コードが実行されますあなたの例では最後のビットを見てみましょう、ということを考えると

...

/* code ommited */ 

。そのようなことが起こらないようにするには、メソッドから戻るか、Response.RedirectToRoute()を呼び出した後にコードパスが存在しないようにコードを構造化する必要があります。