我很好奇,如何将参数传递给服务器端函数,看起来像这样?
<asp:LinkButton ID="lkbChange" runat="server" OnClick="lkbChange_Click" />
然后服务器端函数看起来像这样:
<script runat="server">
protected void lkbChange_Click(Object sender, EventArgs e)
{
Session["location"] = new_value;
}
<script >
我想要像:
<asp:LinkButton ID="lkbChange" runat="server" OnClick="lkbChange_Click(<%= value %>)" />
protected void lkbChange_Click(Object sender, EventArgs e, string value)
{
Session["location"] = value;
}
因此将参数传递给函数调用也存在问题......
修改
好的,我开始觉得runat =“server”错了。好吧,我正在介绍一些机器和那些属性。我想要的是根据这些机器的位置过滤当前结果(总机器内容,历史等)。这意味着当前操作应该保持不变 - 计算相同的结果集,仅过滤到当前选择的位置 - 从链接获取,将会话[“位置”]的值更改为例如。无处不在。
答案 0 :(得分:1)
什么是价值?它是LinkButton的一些属性吗?如果是,那么您可以通过发件人访问它。
如果是其他内容,那么AFAIK要么使用您提到的方式,要么您可以编写自定义事件处理程序。
答案 1 :(得分:1)
您可以使用CommandArgument和CommandName来实现这一目标。
<asp:LinkButton ID="lkbChange" runat="server" CommandArgument="MyArg"
CommandName="ThisLnkClick" OnClick="MyHandler" />
您创建处理程序:
protected void MyHandler(Object sender, EventArgs e)
{
Button lnkButton = (Button)sender;
//You could handle different command names by doing something like: if (lnkButton.CommandName == "ThisLnkClick") ...
CustomMethod(lnkButton.CommandArgument.ToString());
}
然后,您必须创建一个带参数的自定义方法。
答案 2 :(得分:1)
好吧,我对你实际需要的东西仍然有点朦胧但是我会试一试(虽然我担心它会引起更多问题而不是答案; - )。
在您的global.asax.cs中添加类似于此的路线:
routes.MapRoute(
"MachineList",
"Machines/AddLocationFilter/{filterValue}",
new { controller = "Machines", action = "AddLocationFilter", filterValue = "" }
);
然后,您视图中的所有链接都会像('value'是您的过滤器值):
<%= Html.ActionLink("link text",
"AddLocationFilter",
new { filterValue = value })%>
现在在您的机器控制器中:
public ActionResult Index()
{
//Get your machines here
//NOTE: I have no idea how you want this to work and this is just an example of how it could work
IQueryable<Machine> machines = myMachineRepository.GetAllMachines();
//Use the "FilterLocations" session value if it exists
if (Session["FilterLocations"] != null)
{
IList<string> filterLocations = Session["FilterLocations"] as List<string>
machines.Where(m => Locations.Contains(m.Location))
}
//Now send the filtered list of machines to your view
return View(machines.ToList());
}
public ActionResult AddLocationFilter(string filterValue)
{
//If there isn't a filterValue don't do anything
if (string.IsNullOrEmpty(filterValue))
return RedirectToAction("index");
IList<string> filterLocations;
//Get it from session
if (Session["FilterLocations"] != null)
filterLocations = Session["FilterLocations"] as List<string>
//If it's still null create a new one
if (filterLocations == null)
filterLocations = new List<string>();
//If it doesn't already contain the value then add it
if (!filterLocations.Contains(filterValue))
filterLocations.Add(filterValue);
//Finally save it to the session
Session["FilterLocations"] = filterLocations;
//Now redirect
return RedirectToAction("index");
}
精明?
我对最后的重定向并不完全满意,但为了简单起见我这样做是为了帮助您更轻松地理解事物。您可以使用jQuery做一些简化和性感的事情并返回JSON结果......但这是另一个级别。
HTHS
查尔斯