【问题标题】:Clickable image in WebGrid inside a Controller (via Ajax )?控制器内 WebGrid 中的可点击图像(通过 Ajax )?
【发布时间】:2012-04-05 01:11:48
【问题描述】:

我在我的控制器中使用 MVC3 WebGrid。我需要在列中有一个图像,这样当您单击该图像时,数据将传递给任何控制器内的操作。我想通过 Ajax 执行此操作,即单击图像不应导致回发,它应该是对某个控制器上的动作的 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() 方法里面应该放什么? 编辑:这是我迄今为止尝试过的,但它不起作用: 我发现了 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)));

【问题讨论】:

    标签: ajax asp.net-mvc-3 webgrid


    【解决方案1】:
    @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 
        }
    )
    

    【讨论】:

    • 这可以在视图中使用,我需要在控制器中使用它。它在那里不起作用
    • 控制器内部需要什么?你为什么首先在控制器中生成 HTML?这不是控制器的本意。控制器操作模型并呈现视图。这完全是视图的责任。您可以在这些视图中使用 HTML 助手来封装一些常见的重复逻辑。
    • 我读了一点,看来我必须创建一个 AjaxHelper 类的实例,也是 ViewContext 等的实例。不能做太多,我是 MVC 新手跨度>
    • @karank,你不能在控制器中这样做。控制器中没有 ViewContext。
    • 嗯,我有这种情况,我点击这个按钮,一条记录应该被添加到网格中,页面的内容也应该改变。然后在做了所有的改变之后,我有一个 Next 按钮,它引导我进入下一页。所以我决定通过 Ajax 添加一行,更新删除也是如此。
    猜你喜欢
    • 2016-05-09
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多