如何从后端代码到HTML OnClick ASP.NET检索输入

时间:2018-09-03 07:53:09

标签: c# html asp.net

在我现有的项目中,我仍在理解以前开发人员的代码。我不确定如何使用HTML格式的Eval

我在html表单上有一个onclick操作,该操作会根据用户名,商品编号和文档类型下载文件。

它包含DocType=10的硬编码值。

应该是:

Group 1 = 10
Group 2 = 20
Group 3 = 30

代码段:

UserControl.ascx

<a href="#" onclick="openDialog('/SitePages/FileDownload.aspx?DocType=10&ItemNo=<%#Eval("ItemNo")%>&CustomerID=<%#Eval("CustomerID")%>')">

UserControl.ascx.cs

TBL_USER_PROFILEProvider uprovider = new TBL_USER_PROFILEProvider();

int DOC_TYPE;
// Document Types
const int G1_DOC_TYPE = 10;
const int G2_DOC_TYPE = 20;
const int G3_DOC_TYPE = 30;


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string userName = SPContext.Current.Web.CurrentUser.Name;
        TBL_USER_PROFILE p = uprovider.GetUser(userName);
        if (p != null)
        {
            // get group permissions
            List<string> G1List = uprovider.GetAccessByModuleName(p.UserProfileID, "Group1");
            List<string> G2List = uprovider.GetAccessByModuleName(p.UserProfileID, "Group2");
            List<string> G3List = uprovider.GetAccessByModuleName(p.UserProfileID, "Group3");

            // check doc type and deny access if not any
            if (G1List.Count != 0)
            {
                DOC_TYPE = G1_DOC_TYPE;
            }
            else if (G2List.Count != 0)
            {
                DOC_TYPE = G2_DOC_TYPE;
            }
            else if (G3List.Count != 0)
            {
                DOC_TYPE = G3_DOC_TYPE;
            }
            else
            {
                Response.Redirect("/SitePages/AccessDeny.aspx");
            }
        }
    }
}

我可以知道如何将DOC_TYPE的值从代码中拉到CS表单中吗?


p.s。 DOC_TYPEDocumentType表中的intTBL_DOCUMENT


在@ tetsuya-yamamoto的答案后更新:

UserControl.ascx

<a href="#" runat="server" onclick="openDialog('/SitePages/FileDownload.aspx?DocType=<%# DocType %>&ItemNo=<%#Eval("ItemNo")%>&CustomerID=<%#Eval("CustomerID")%>')">

UserControl.ascx.cs

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // other logic here

        if (G1List.Count != 0)
        {
            DOC_TYPE = G1_DOC_TYPE;
        }
        else if (G2List.Count != 0)
        {
            DOC_TYPE = G2_DOC_TYPE;
        }
        else if (G3List.Count != 0)
        {
            DOC_TYPE = G3_DOC_TYPE;
        }
        else
        {
            Response.Redirect("/SitePages/AccessDeny.aspx");
        }

        Page.DataBind();
    }
}

我明天将进行测试,因为直到那时我仍无法访问服务器。

如果我纠正错误,请纠正我。谢谢!

1 个答案:

答案 0 :(得分:1)

由于您有一个带有默认访问修饰符的int变量,因此您需要创建一个具有publicprotected访问修饰符的属性,该属性的数据类型与页面标记中的可见性相同:

int DOC_TYPE;

public int DocType 
{ 
   get 
   { 
       return DOC_TYPE; 
   } 
}

然后,您可以使用投影语法DocType提供<%= DocType %>属性:

<a href="#" onclick="openDialog('/SitePages/FileDownload.aspx?DocType=<%= DocType %>&ItemNo=<%#Eval("ItemNo")%>&CustomerID=<%#Eval("CustomerID")%>')">

如果要在服务器控件标记中使用该属性(即具有runat="server"属性),则应使用<%# DocType %>绑定语法而不是<%= DocType %>投影语法并调用{{1 }} Page.DataBind()方法:

Page_Load