我正在构建一个ASP.NET MVC项目,并采用以下架构:
所以,假设我想添加一个用户.我NewUserInputModel在Core项目中定义了一个.我给它一些数据注释,如[Required].执行此操作后,Web项目将根据这些注释执行客户端验证.
我的问题是关于服务器端验证.我要验证的NewUserInputModel使用正在在客户端使用相同的规则,我想运行一个验证的天气NewUserInputModel从进来API或网络项目.
我意识到我可以ModelState.IsValid从Web项目中的Controller 调用- 但是我想从Core项目中调用该验证,以便所有验证逻辑都存在于Core中.这样,无论这个模型如何进入Core逻辑,我总是调用相同的验证.我不想将System.Web引用泄漏到我的Core项目中.
这是一个合理的设计吗?我认为是 - 但如果有什么东西闻起来,我会很高兴听到它.
在此先感谢您的帮助.
我正在构建一个问卷mvc webapp,我无法弄清楚如何从表单中将未知数量的参数传递给控制器.
我的表格是这样的:
<% using (Html.BeginForm())
{ %>
<div id="Content">
<% foreach (var group in ViewData.Model.QuestionGroups)
{ %>
<div class="Group">
<%=group.Description %>
<% foreach (var question in group.Questions)
{%>
<div class="Question">
<div class="QuestionTitle">
<%=question.Title %>
</div>
<%=Html.Hidden("Id", question.ID) %>
<div class="QuestionText">
<%switch (question.TypeAsEnum)
{
case QuestionTypeEnum.Text:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.Number:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.PhoneNumber:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Email:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Date:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.YesNo:%>
<%=Html.RadioButton("somename", true)%>
<%=Html.RadioButton("somename", false)%>
<% break;
case …Run Code Online (Sandbox Code Playgroud) 这些实体在虚拟上相当于我要完成的工作(实际上更复杂)。
我只需要在创建Article(SendToSubscribers字段)时才需要在表单中显示其他字段,这些字段就不是实体本身的一部分。
public class Article {
public string Title { get; set }
}
public class ArticleCreateForm : Article {
public bool SendToSubscribers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在cshtml中,用于创建/更新:
@model Article
...
@if (string.IsNullOrEmpty(Model.Id))
{
<admin-input asp-for="SendToSubscribers" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是我得到的错误:
'Article'不包含'SendToSubscribers'的定义,找不到可以接受的扩展方法'SendToSubscribers'接受类型为'Article'的第一个参数(您是否缺少using指令或程序集引用?)
如果方法根本不好,很抱歉,我来自PHP背景。
我猜这不是一个好的解决方案,那么我该如何纠正呢?谢谢。