我有一个页面,其中包含一个表单(即向页面提交数据的元素)和几个ASP控件。 ASP控件必须包含在带有form
的{{1}}标记中,尽管它们与提交数据无关,而且无关的runat="server"
标记比无用更糟糕。这个form
必须包含所有控件,这意味着它还将包含执行有用工作的实际表单的标记。
这个form
有一个form
的方法和一个非本页的动作,它们都不能与ASP很好地配合。我尝试在ASP样板中嵌套正确的表单标签,但是浏览器不会接受它,可能是因为规范明确禁止它。此表单的字段是通过Javascript生成的,因此无法将其转换为ASP控件。
可以解决这个问题的事情:
get
,而不会将无用的crud转移到标记中。 (这可能吗?)想法?
答案 0 :(得分:0)
新的事件处理程序:
public void GetRequest(object sender, CommandEventArgs e)
{
string url = string.IsNullOrEmpty(e.CommandArgument as string)
? Request.Url.AbsolutePath
: (string)e.CommandArgument;
var query = Request.Form.ToDictionary()
.Where(kv => kv.Key.StartsWith(e.CommandName + "$"))
.Select(kv => string.Format("{0}={1}",
Server.UrlEncode(kv.Key.Substring(kv.Key.IndexOf("$") + 1)),
Server.UrlEncode(kv.Value)));
string destination = string.Format("http://{0}{1}{2}{3}",
Request.Url.Authority,
Page.ResolveUrl(url),
query.Any() ? "?" : "",
string.Join("&", query));
Response.Redirect(destination);
}
在aspx中:
<div class="form" id="filters-form">
<div><input type="hidden" name="filters$OrderBy" value="<%= Orderings.ToSortString() %>" /></div>
<fieldset id="filters"><!-- Will be filled in by javascript --></fieldset>
<fieldset id="controls">
<div>
<button type="button" id="add-filter">New Filter</button>
<asp:Button runat="server" Text="Apply Filters" OnCommand="GetRequest" CommandName="filters" />
</div>
</fieldset>
</div>