使用html控件调用函数后面的代码

时间:2008-12-18 17:32:40

标签: html asp.net-mvc

我有一个简单的函数,我想在文件名Move后面的代码中调用 我试图看看如何做到这一点我不使用asp图像按钮,因为他们没有尝试使用ASP服务器端控件,因为他们往往不能很好地与ASP.net MVC ...它的设置方式现在它将寻找一个名为Move的javascript函数,但我希望它在同一视图后面的代码中调用名为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 个答案:

答案 0 :(得分:1)

Scott Guthrie在如何使用路由规则方面有very good example

这样,您就可以让用户以{搜索/ [查询] / [PageNumber]格式导航到某个网址,例如http://site/Search/Hippopotamus/3,它会显示河马搜索结果的第3页。< / p>

然后在您的视图中,只需将下一个按钮指向“http://site/Search/Hippopotamus/4”,无需JavaScript。

当然,如果你想使用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);
}

但这比仅仅增加控制器中的页码参数和设置下一个按钮的URL要复杂得多。

答案 1 :(得分:0)

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

根据评论,我将更新这个答案,更完整地描述如何实现我理解为问题中描述的问题。但是,问题中缺少相当多的信息,所以我在这里猜测。希望一般的想法能够通过,即使一些细节与TStamper的确切代码不符。

让我们从Controller动作开始:

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

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

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中传递它。

再一次,我将在后面的代码中表达我的保留意见。当MVC的工作方式不同时,我试图在MVC框架内部使用标准的ASP.NET技术。我强烈建议通过MVC教程来查看更多标准方法来做这类事情的例子。