我在我的控制器中使用了MVC3 WebGrid。我需要在列中有一个图像,这样当你点击该图像时,数据就会传递给任何控制器内的动作。我想通过Ajax来做到这一点,即单击图像不应该导致回发,它应该是对某些Controller上的Action的Ajax调用。我想传递一个对象(模型),而不是任何字符串,或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()方法应该放什么? 编辑:这是我到目前为止尝试过的,它不起作用: 我已经找到了Ajax在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 :(得分: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
}
)