Визуализация пользовательского контроля условно - PullRequest
1 голос
/ 05 мая 2011

У меня есть простой пользовательский элемент управления для вставки данных в базу данных. Я сделал открытое свойство isInModifyMode для пользовательского элемента управления. Я установил для свойства загрузки страницы usercontrols значение true, если при нажатии кнопки редактирования на событии click родительского элемента управления установлено значение true, а затем в событии загрузки страницы родительской страницы я проверил свойство IsinModifymode. и отобразить элемент управления в режиме изменения со значениями, заполненными в текстовых полях, и всеми другими элементами управления из базы данных (т. е. я изменяю текстовое свойство кнопки для обновления вместо сохранения)

но код не работает. если любое тело может помочь заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

До сих пор не совсем понятно, что вы пытаетесь сделать, а что именно не работает. Но я попытаюсь ответить несколькими предположениями:

  • Вы хотите, чтобы форма изменялась на основе isInModifyMode только при простом событии обратной передачи
  • Под «событием щелчка родительского элемента управления» вы подразумеваете одну кнопку, которая запускает обратную передачу
  • Вы используете C # и код позади

Принцип очень прост, и есть несколько способов сделать то, о чем я думаю, вы спрашиваете. Один из способов - привязать событие к кнопке, чтобы установить свойство isInModifyMode вашего элемента управления. И в самом элементе управления пусть метод установки свойства вызывает метод, который обновляет отображение. Это проиллюстрировано в следующем очень элементарном и неидеальном примере:

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="WebUserControl.ascx" TagName="WebUserControl" TagPrefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <uc1:WebUserControl ID="WebUserControl1" runat="server" isInModifyMode="false" />
        <asp:Button ID="EditButton" runat="server" Text="Edit" />
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    protected override void OnInit(EventArgs e)
    {
        // Assign the handler for the edit button click event
        EditButton.Click += new EventHandler(EditButton_Click);

        base.OnInit(e);
    }

    /// <summary>
    /// Edit button click handler
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void EditButton_Click(object sender, EventArgs e)
    {
        WebUserControl1.isInModifyMode = true;
    }
}

WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

<asp:PlaceHolder ID="ReadOnlyModePlaceholder" runat="server">
    <p>Read Only Mode</p>
</asp:PlaceHolder>

<asp:PlaceHolder ID="EditModePlaceholder" runat="server" Visible="false">
    <p>Edit Mode</p>
</asp:PlaceHolder>

WebUserControl1.ascx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class WebUserControl : System.Web.UI.UserControl
{
    /// <summary>
    /// Changes the display mode by toggling the appropriate controls on or off
    /// based on the isInModifyMode property
    /// </summary>
    private void SetDisplayMode()
    {
        if (!this.isInModifyMode)
        {
            // Render as not modify
            ReadOnlyModePlaceholder.Visible = true;
            EditModePlaceholder.Visible = false;
        }
        else
        {
            // Render as modify
            ReadOnlyModePlaceholder.Visible = false;
            EditModePlaceholder.Visible = true;
        }
    }

    /// <summary>
    /// Determines whether or not the control should be displayed in edit mode or not.
    /// </summary>
    public bool isInModifyMode
    {
        get
        {
            if (ViewState["isInModifyMode"] != null)
                return (bool)ViewState["isInModifyMode"];
            else
                return false;
        }
        set
        {
            ViewState["isInModifyMode"] = value;
            // Since we're possibly changing modes, call
            // the SetDisplayMode() method to update the display
            SetDisplayMode();
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Set the display mode on the initial load
        if (!IsPostBack)
            SetDisplayMode();
    }
}
1 голос
/ 05 мая 2011

Посмотрите на жизненный цикл страницы ASP.Net и последовательность событий.

События загрузки страницы и загрузки управления запускаются до нажатия кнопки ButtonClick.Переместите логику рендеринга в событие PreRender.

Если это не поможет, добавьте код для лучшего понимания вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...