代码之家  ›  专栏  ›  技术社区  ›  TStamper

使用html控件调用代码隐藏函数

  •  0
  • TStamper  · 技术社区  · 17 年前

    我有一个简单的函数,我想在代码隐藏文件名Move中调用它

     <img alt='move' id="Move" src="/Content/img/hPrevious.png" onclick="Move()"/>
    
    
    protected void Move(){
    
    }
    

    //根据搜索条件更新新表

     protected void Search(object sender EventArgs e)
    {
     for (int i = 0; i < data.Count; i++){
     HtmlTableRow row = new HtmlTableRow();
     HtmlTableCell CheckCell = new HtmlTableCell();
     HtmlTableCell firstCell = new HtmlTableCell();
     HtmlTableCell SecondCell = new HtmlTableCell();
     CheckBox Check = new CheckBox();
     Check.ID = data[i].ID;
     CheckCell.Controls.Add(Check);
     lbl1.Text = data[i].Date;
     lbl2.Text = data[i].Name;
      row.Cells.Add(CheckCell);
      row.Cells.Add(firstCell);
      row.Cells.Add(SecondCell); 
      Table.Rows.Add(row);
    }
    

    }

    2 回复  |  直到 17 年前
        1
  •  1
  •   joshperry    17 年前

    Scott Guthrie有一个 very good example 关于如何使用路由规则执行此操作。

    http://site/Search/Hippopotamus/3 它将显示河马搜索结果的第3页。

    然后在您看来,只需将“下一步”按钮指向“ http://site/Search/Hippopotamus/4 ,不需要javascript。

    function Move() {
        var href = 'http://blah/Search/Hippopotamus/2';
        var slashPos = href.lastIndexOf('/');
        var page = parseInt(href.substring(slashPos + 1, href.length));
        href = href.substring(0, slashPos + 1);
    
        window.location = href + (++page);
    }
    

        2
  •  0
  •   Craig Stuntz    17 年前

    在ASP.NET MVC应用程序中,不能从JavaScript在视图中进行回发或调用任何内容。要从JavaScript调用的任何内容都必须是控制器上的操作。如果没有更多关于您要做什么的细节,很难说得更多,但是如果您想从JavaScript调用web应用程序中的某个方法“Move”,那么“Move”必须是控制器上的一个操作。

    让我们从控制器操作开始:

    public ActionResult ShowMyPage();
    {
        return View();
    }
    

    现在我知道我想重新显示这个页面,并使用页面中JavaScript函数传递的参数来实现。因为我将再次显示相同的页面,所以我将更改操作以获取参数。字符串参数可以为null,因此我可以像往常一样继续进行页面的初始显示,而不必担心为参数指定某种默认值。以下是新版本:

    public ActionResult ShowMyPage(string searchQuery);
    {
        ViewData["SearchQuery"] = searchQuery;
        return View();
    }
    

    现在我需要用JavaScript再次调用此页面。因此,我使用了最初用于显示页面的相同URL,但我用表名附加了一个查询字符串参数:

    http://example.com/MyControllerName/ShowMyPage?searchQuery=tableName

    最后,在我的aspx中,我可以调用代码隐藏函数,从视图数据传递searchQuery。再一次,我对在MVC应用程序中使用代码隐藏有强烈的保留意见,但这是可行的。

    如何在aspx中调用代码隐藏函数:

    <% Search(ViewData["searchQuery"]); %>
    

    我改变了论点。由于您没有处理事件(除了少数例外,例如Page_Load,MVC中没有),因此搜索函数不需要事件处理程序的签名。但是我添加了“tablename”参数,以便您可以从aspx传递它。