Кликабельное изображение в WebGrid внутри контроллера (через Ajax)? - PullRequest
0 голосов
/ 20 марта 2012

Я использую MVC3 WebGrid внутри моего контроллера. Мне нужно иметь изображение в столбце, чтобы при нажатии на это изображение данные передавались в действие внутри любого контроллера. Я хочу сделать это через AjaxТо есть нажатие на изображение не должно вызывать обратную запись, это должен быть Ajax-вызов Action для некоторого контроллера. И я хотел бы передать объект (модель), а не любую строку, или int, или что-то еще).

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)));

1 Ответ

0 голосов
/ 21 марта 2012
@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 
    }
)
...