我有一个简单的函数,我想在文件名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);
}
}
答案 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教程来查看更多标准方法来做这类事情的例子。