我正在开发一个多层网站(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 ));
}
答案 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";
}
}
现在业务层仅执行逻辑,它不会尝试与表示元素进行交互。这是表示层的工作。