2012-03-20 53 views
0

我在我的控制器內使用MVC3 WebGrid。我需要在列中有一個圖像,這樣當您單擊該圖像時,數據將傳遞給任何控制器內的動作。我想通過Ajax執行此操作,即單擊圖像不應該導致回發,它應該是對某個Controller的Action的Ajax調用。並且我想傳遞一個對象(模型),而不是任何字符串或int,或其他)。控制器內的WebGrid中的可點擊圖像(通過Ajax)?

public ActionResult AddInGrid(AjaxModel m) 
     { 
      if (Session["ajaxmodel"] == null) 
      { 
       Session.Add("ajaxmodel", a.am); 
      } 
      List<AjaxModel> list = (List<AjaxModel>)Session["ajaxmodel"]; 
      list.Insert(0, m); 
      Session.Add("ajaxmodel", list); 
      WebGrid g = new WebGrid(list); 
      IHtmlString s = g.GetHtml(); 
      string s1 = s.ToString(); 
      return Json(new { text = s1 }); 
     } 

應該在GetHtml()方法裏面放什麼? 編輯:這是我到目前爲止已經試過,而且它不工作: 我發現了什麼HTML渲染上Ajax.ActionLink,並試圖爲併入

WebGrid g = new WebGrid(list); 
    string link = string.Format(@"<a data-ajax='true' data-ajax-method='GET' data-ajax-mode='replace' href='/Home/Delete/{0}' />Delete</a>",item.fname); 
IHtmlString s = g.GetHtml(g.Columns(g.Column(format:link))); 

回答

0
@grid.GetHtml(
    columns: grid.Columns(
     grid.Column(
      columnName: "", 
      format: 
       @<text> 
        @Ajax.ActionLink(
         "Delete", 
         "delete", 
         "home", 
         new AjaxOptions { 
          UpdateTargetId = "sometargetdiv", 
          InsertionMode = InsertionMode.Replace 
         } 
        ) 
       </text> 
     ) 
    ) 
) 

至於通過整個模型的動作而言,好了,你可以使用routeValues參數,並通過不同的屬性作爲查詢字符串參數:

@Ajax.ActionLink(
    "Delete", 
    "delete", 
    "home", 
    new { 
     fname = item.fname, 
     lname = item.lname 
     .... and so on for each property you want to fetch back 
    }, 
    new AjaxOptions { 
     UpdateTargetId = "sometargetdiv", 
     InsertionMode = InsertionMode.Replace 
    } 
) 
+0

這個工程的一個視圖中,我需要它Controller.It內不工作有 – 2012-03-21 08:32:16

+0

你需要什麼insi控制器?爲什麼你首先在控制器中生成HTML?這不是控制器要做的。控制器操作模型並呈現視圖。這完全是這個觀點的責任。您可以在這些視圖中使用HTML助手來封裝一些通常重複的邏輯。 – 2012-03-21 08:32:39

+0

我讀了一下,似乎我必須創建一個AjaxHelper類的實例,也是ViewContext等的實例。不能做太多,我是MVC的新手 – 2012-03-21 08:33:45

相關問題