通过应用程序层传递label.text

时间:2015-05-20 13:20:41

标签: c# asp.net

我正在开发一个多层网站(asp C#)。我很好奇如何从业务层内部访问设置标签文本。目前它说它无法解析符号,但我在我的表示层中有它。有没有办法通过所有图层并设置label.Text?

基本上我想在业务层中进行验证,而不是在表示层上进行验证,但我需要能够在验证失败时设置标签。

public CommandResponse<int> AddRequest(AddRequestCommand command)
    {
        CommandResponse<int> response = new CommandResponse<int>();
        //DO domain logic
        using (var context = ContextFactory.GetContext())
        {
            var repo = RepositoryFactory.GetRequestRepository(context);
            string email = command.Request.RecipientEmail;
            Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
            Match match = regex.Match(email);
            if (!match.Success)
            {
                lblEmailmsg.Text = "Error Message"
            }



            var id = repo.Add(command.Request);

            response.Id = id;
            response.IsSuccessful = true;

            DomainEvents.Raise<RequestCreatedEvent>(new  RequestCreatedEvent(command.Request, command.Request.Token ));
        }

2 个答案:

答案 0 :(得分:1)

你的问题有点细节,但是从你的最后一句话来看:

  

基本上我想在Business层中进行验证而不是在   表示层,但我需要能够设置标签时   验证失败。

我想我知道你的意思。

以下是我将如何做这件事:

使用Ajax / JSON将数据发送到服务器。处理您需要的内容,包括那里的所有验证,然后将JSON数据发送回客户端(然后在Ajax调用的“成功”处理程序中可用),包括需要更新的任何标签文本。

然后,您可以使用此结果并执行JS / jQuery所需的操作,包括更新标签等。此外,Knockout.js是一个很好的工具(在几个中)可以简化这种类型的客户端数据绑定。

答案 1 :(得分:0)

据推测,你正试图做这样的事情:

public class SomethingInThePresentationLayer
{
    public void SomeMethod()
    {
        var businessObject = new SomethingInTheBusinessLayer();
        businessObject.Validate();
    }
}

public class SomethingInTheBusinessLayer
{
    public void Validate()
    {
        pageElement.Text = "This is the text.";
    }
}

这是不正确的,原因有两个。首先,课程不能像这样看到对方的成员。 SomethingInTheBusinessLayer需要引用pageElement成员才能使用它。

其次,这是混合问题。 pageElement是表示层元素。它完全由表示层拥有,业务层中的任何内容都不应该知道它。这是特别是是理解它需要引用业务层不应引用的库(例如System.Web)。

相反,在与业务层交互时,您将使用更多可移植类型。它们可以是业务层本身公开的自定义类型,也可以是您正在使用的值的基本类型。例如,您可能会遇到以下情况:

public class SomethingInThePresentationLayer
{
    public void SomeMethod()
    {
        var businessObject = new SomethingInTheBusinessLayer();
        var result = businessObject.Validate();
        pageElement.Text = result;
    }
}

public class SomethingInTheBusinessLayer
{
    public string Validate()
    {
        return "This is the text";
    }
}

现在业务层执行逻辑,它不会尝试与表示元素进行交互。这是表示层的工作。