我有以下HtmlHelper方法,我想创建一个使用JavaScript重定向的按钮:
public static string JavaScriptButton(this HtmlHelper helper, string value,
string action, string controller, object routeValues = null, object htmlAttributes = null)
{
var a = (new UrlHelper(helper.ViewContext.RequestContext))
.Action(action, controller, routeValues);
var builder = new TagBuilder("input");
builder.Attributes.Add("type", "submit");
builder.Attributes.Add("value", value);
builder.Attributes.Add("class", "button");
builder.Attributes.Add("onclick", string.Format("javascript:location.href='{0}'", a));
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing)).ToString();
}
Run Code Online (Sandbox Code Playgroud)
问题是创建onclick处理程序的行被tagbuilder转义,生成的html是:
<input class="button" onclick="javascript:location.href=''" type="submit" value="Return to All Audits" />
Run Code Online (Sandbox Code Playgroud)
无论如何我可以阻止这种行为吗?
我有这样的网格视图:
<asp:SqlDataSource ID="SqlPersistentOffenders" runat="server"></asp:SqlDataSource>
<asp:GridView ID="GVPersistentOffenders" runat="server" DataSourceID="SqlPersistentOffenders" AllowPaging="true" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="PersonID" Visible="false">
<ItemTemplate>
<asp:Label ID="LabCreUser" runat="server" Text='<%# Bind("creUser")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="ButtonSendEmail" runat="server" CommandName="SendEmail" CommandArgument="<%# CType(Container,GridViewRow).RowIndex %>" Text="Send Email" OnClientClick="GetEmailAddress()"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
JavaScript看起来像这样:
<script type="text/javascript">
function GetEmailAddress(creuser) {
//Do something
}
</script>
Run Code Online (Sandbox Code Playgroud)
如何将LabCreUser中的值传递给选择的行到Javasript函数?
我看过这里:在onclientclick中将变量传递给javascript以及其他一些问题.我没有尝试过任何工作.