Динамически добавлять пользовательский элемент управления с веб-службой - PullRequest
1 голос
/ 14 декабря 2011

Я столкнулся с проблемой, связанной с контролем пользователя с помощью веб-службы. Пожалуйста, помогите мне, я сделал интерфейсный вызов IcustomeClass, у которого есть один метод с именем GetHtml

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for ICustomeClass
/// </summary>
public interface ICustomeClass
{
    string GetHtml(string controlLocation);
}

У меня есть класс с именем ControlBaseClass, который наследуется от UserControlи ICustomeClass

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Web.UI.HtmlControls;


/// <summary>
/// Summary description for ControlBaseClass
/// </summary>
public class ControlBaseClass : UserControl, ICustomeClass
{
    public ControlBaseClass()
    {

    }

    public string GetHtml(string controlLocation)
    {
        return GetControlHtml(controlLocation);
    }

    private string GetControlHtml(string control)
    {
        var controlMarkup = string.Empty;
        Page page = new Page();
        var customControl = page.LoadControl(control) as UserControl;
        if (customControl != null)
        {
            var htmlForm = new HtmlForm(); 
            var output = new StringWriter();
            htmlForm.Controls.Add(customControl);
            page.Controls.Add(htmlForm);
            HttpContext.Current.Server.Execute(page, output, false);
            controlMarkup = output.ToString();
        }
        return controlMarkup;
    }
}

, и у меня есть служба ControlService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// Summary description for LoadControlService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class LoadControlService : System.Web.Services.WebService
{

    public LoadControlService()
    {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string GetControlHtml(string controlLocation)
    {
        ControlBaseClass controlBase = new ControlBaseClass();
        return controlBase.GetHtml(controlLocation);
    }

}

, и я использую диспетчер скриптов AJAX на своей странице

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/Services/LoadControlService.asmx" />
            </Services>
            <CompositeScript>
                <Scripts>
                    <asp:ScriptReference Path="~/Scripts/ControlScript.js" />
                </Scripts>
            </CompositeScript>
        </asp:ScriptManager>
        <table>
            <tr>
                <td>
                    <input id="AddBrandButton" type="button" value="Brand" onclick="GetControl('~/UserControls/AddMovies.ascx')" />
                </td>
                <td>
                    <input id="AddConsoleButton" type="button" value="Console" onclick="GetControl('~/UserControls/AddLog.ascx')" />
                </td>
            </tr>
        </table>
        <div id="ResultDiv">
        </div>
    </div>
    </form>
</body>

У меня есть Javaкод сценария, который использует веб-сервис для получения пользовательского элемента управления html

/// <reference path="../MainPage.aspx" />
/// <reference name="MicrosoftAjax.js"/>


function GetControl(control) {
    LoadControlService.GetControlHtml(control, ControlSuccess, ControlFailure, "");
}

function ControlSuccess(result) {
    var div = $get('ResultDiv');
    div.innerHTML = result;

}
function ControlFailure(error) {
    alert(error);

} 

У меня есть две кнопки на моей странице под названием «Добавить фильмы и добавить журнал», когда я нажимаю кнопку, веб-служба возвращает HTML-код элемента управления пользователя и отображает егона странице все работает нормально, теперь моя проблема в том, что когда я нажимаю первую кнопку, появляется пользовательский элемент управления и я добавляю данные в текстовые поля, но когда я нажимаю вторую кнопку, появляется другой пользовательский элемент управления, и предыдущий пользовательский элемент управления исчезает.

Я хочу сохранить данные предыдущих текстовых блоков управления, чтобы я мог сохранить всеДанные в базе данных одним кликом, другими словами, я делаю вкладку управления, которая сохранит все данные в один клик.

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