2012-05-05 1 views
0

この部分図は、jQueryのダイアログに表示され削除のasp.net MVCでの部分図でforeachのではnullです3 私がDeleteボタンを押すと、NullReferenceExceptionが発生します。そのモデルはNullです。モデル

どのようにすることができますか?

@using (@Html.BeginForm("Delete","Template",FormMethod.Post)) 
{ 
    <table> 
    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Id) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Name) 
      </td>  
      <td>   
       @Html.ActionLink("Delete", "Delete", new { id = item.Id, returnUrl = Request.Url.PathAndQuery }) 
      </td> 
     </tr> 
    } 
    </table> 
} 

コントローラー:

[HttpGet] 
     public ActionResult Delete() 
     { 
      string actionName = ControllerContext.RouteData.GetRequiredString("action"); 
      if (Request.QueryString["content"] != null) 
      { 
       ViewBag.FormAction = "Json" + actionName; 

       var list = new List<Template> { 
        new Template{ Id = 1, Name = "WorkbookTest"}, 
        new Template{ Id = 2, Name = "ClientNavigation"}, 
        new Template{ Id = 3, Name = "Abc Rolap"}, 
        }; 

       return PartialView(list); 
      } 
      else 
      { 
       ViewBag.FormAction = actionName; 
       return View(); 
      } 
     } 

[HttpPost] 
     public JsonResult JsonDelete(int templateId, string returnUrl) 
     { 
      // do I get here no ! 
      if (ModelState.IsValid) 
      { 
       return Json(new { success = true, redirect = returnUrl }); 
      } 

      // If we got this far, something failed 
      return Json(new { errors = GetErrorsFromModelState() }); 
     } 

更新:どのようにあなたのActionLinkのから判断

<table> 
@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Id) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td>  
     <td> 
      @using (@Html.BeginForm((string)ViewBag.FormAction, "Template")) 
      { 
       @Html.Hidden("returnUrl", Request.Url.PathAndQuery); 
       @Html.Hidden("templateId", item.Id)    
       <input type='submit' value='Delete' /> 
      } 
     </td> 
    </tr> 
} 
</table> 

答えて

0

:このコードは動作し、コントローラに正しいれるtemplateIdを供給している

書かれている、コントローラの一部がコントローラの一部を実行します(の内容はクエリ文字列に含まれません)。そのコードはモデルがないView()を返します。したがって、「モデルはnullです」例外です。

編集

私が見ることができる2つの問題があります。

  1. あなたがターゲットとしているアクションがPOSTを必要としているので、あなたは、フォームのポストバックを使用する必要はありませんがActionLink(GETを使用する)
  2. アクションにはtemplateIdが必要なので、route属性にはその値を設定する必要があります。

は、だから私は、これは動作するはずと思っています:

@{ using (Html.BeginForm()) { 
    <input type='hidden' name='templateId' value='@item.Id' /> 
    <input type='submit' value='Delete' /> 
}} 
+0

申し訳ありませんが私はポストが実行されることはありません方法JsonDeleteを削除、追加するのを忘れ。削除リンクをクリックすると、HttpGetアクションが投稿されないので、あなたが話した部分には決して行きません。 – Elisabeth

+0

@Elisa、ありがとう、私は何かが欠落していたと思ったが、何が確かではなかった。私の更新された答えを見てください。 – McGarnagle