2011-12-29 128 views
1

我从数据库中读取数据,并将其显示在页面编辑:asp.net编辑数据

<h2>Create new topic: 
    <asp:Label ID="_lblTopicName" runat="server" Text=""></asp:Label></h2> 
     <p> 
     Edit Level: 
     <br/> 
     <asp:DropDownList ID="_dtlEditRole" runat="server"></asp:DropDownList> 
     <br/> 
     View Level: 
     <br/> 
     <asp:DropDownList ID="_dtlViewRole" runat="server"></asp:DropDownList> 
     <br/> 
     <asp:TextBox ID="_tbxTopicText" TextMode="MultiLine" runat="server" Height="204px" 
     Width="885px"></asp:TextBox> 
    </p> 
    <asp:Button ID="_btnSaveTopic" runat="server" Text="Save" onclick="_btnSaveTopic_Click" /> 

我填写Page_PreRender领域()像这样:

private string _topicString; 
    private Topic _topic = null; 
    private Topics_GetTopicByTopicResult _findTopicResults = null; 

    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     // Load the User Roles into checkboxes. 
     _dtlEditRole.DataSource = Roles.GetAllRoles(); 
     _dtlEditRole.DataBind(); 
     _dtlViewRole.DataSource = Roles.GetAllRoles(); 
     _dtlViewRole.DataBind(); 

     _topicString = Request.QueryString["Topic"]; 

     if (String.IsNullOrEmpty(_topicString)) 
     { 
      Response.Redirect("~/Default.aspx"); 
     } 
     else 
     { 
      _topic = new Topic(); 
      _findTopicResults = _topic.FindTopic(_topicString); 

      if (_topic != null) 
      { 
       // Check if the user has permission to access 
       if (RoleHelper.IsEditAllowed(_findTopicResults.ViewRoleName)) 
       { 
        _lblTopicName.Text = _findTopicResults.Topic; 
        _tbxTopicText.Text = _findTopicResults.Text; 

        _dtlEditRole.SelectedValue = _findTopicResults.EditRoleName; 
        _dtlViewRole.SelectedValue = _findTopicResults.ViewRoleName; 
       } 
       else 
       { 
        Response.Redirect("~/Error.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.RawUrl)); 
       } 
      } 
      else 
      { 
       Response.Redirect("~/CreateTopic.aspx?Topic=" + _topicString); 
      } 
     } 
    } 

但现在,当我点击_btnSaveTopic键的字段:

private string _topicString; 
    private Topic _topic = null; 
    private Topics_GetTopicByTopicResult _findTopicResults = null; 

他们都是NULL和IM无法更新aything。

这里是我的按钮单击事件:

protected void _btnSaveTopic_Click(object sender, EventArgs e) 
    { 
      _topic.UpdateTopic(_findTopicResults.ID, _findTopicResults.Topic, _tbxTopicText.Text, 
           _dtlViewRole.SelectedItem.Text, _dtlEditRole.SelectedItem.Text); 
      Response.Redirect("~/ViewPage.aspx?Topic=" + _topicString); 
    } 

会是怎样以正确的方式做这个?

+1

你必须使用Page_PreRender? – 2011-12-29 22:41:54

+1

Page生命周期表明Page_Init应该用来'初始化控制属性',它看起来像你正在做的事情...另外,看起来你在那个事件中填充了太多的逻辑。有点丑。 – 2011-12-29 22:45:07

+0

@ subt13:你是对的,即时通讯新的asp.net,在哪里放置逻辑的好地方? – hs2d 2011-12-29 22:49:51

回答

1

ASP.NET Page Life Cycle指出Page_Init应该用来'初始化控制属性',它看起来像你在做什么。

另外,通常会将这些大部分代码分解为更小的重构方法。尽量保持事件处理程序中直接放置的代码量最小。

您可以通过右键单击突出显示的代码段在Visual Studio中开始 - >重构 - >提取方法

另外,如果你需要更多的帮助,了解如何提高你的代码,你应该问一个问题指点在代码审查站点上的这个问题:here

1

您正在重新绑定您的Page_PreRender方法中的下拉列表(并因此删除'SelectedValue')。将方法包装在

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if(!IsPostBack){ 
    //your current code 
    } 
} 

它应该工作。