我在我的应用程序中的强类型视图中有以下代码:
<td>
<label for="TriageStartDate">Triage Start:</label>
<%= Html.TextBox("TriageStartDate", crit.TriageStartDate, new { maxlength = 10, size = 12 } )%>
<%= Html.ValidationMessage("TriageStartDate", "*") %>
</td>
Run Code Online (Sandbox Code Playgroud)
变量crit在ViewData中传递,并使用以下方法强制转换为视图中的强类型对象:
PatientSearchCriteria crit = (PatientSearchCriteria)ViewData["criteria"];
Run Code Online (Sandbox Code Playgroud)
TriageStartDate属性是在对象上定义的字符串属性,如下所示:
public string TriageStartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
我在业务对象中有一个验证例程,它检查此属性的无效日期.在我的控制器中调用验证例程,并且在控制器中,当找到无效日期时(例如"4/34/2009"),我将ModelError添加到ModelState.这应该会导致重新显示视图,并且还会显示验证摘要和消息.
但是,代码在Html.TextBox行崩溃时出现未处理的NullReferenceException.输入无效日期时代码只会崩溃,这可能无关紧要,因为该属性仍然是一个字符串,它应该只在文本框中显示无效日期.
任何想法可能会发生在这里?我认为它可能是一个Html.Encode的东西,但有效的日期显示没有大惊小怪.当我在调试模式中断行时,我可以在TriageStartDate属性中看到值"4/34/2009",并且暴击变量本身不为空,所以我想知道哪个对象是空的?
顺便说一句,堆栈跟踪的前几行看起来像这样:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Mvc.HtmlHelper.GetModelStateValue(String key, Type destinationType) +63
System.Web.Mvc.Html.InputExtensions.InputHelper(HtmlHelper htmlHelper, InputType inputType, String name, Object value, Boolean useViewData, Boolean isChecked, Boolean setId, Boolean isExplicitValue, IDictionary`2 htmlAttributes) +519
System.Web.Mvc.Html.InputExtensions.TextBox(HtmlHelper …Run Code Online (Sandbox Code Playgroud) 我理解正则表达式相当不错,但我不能经常使用它们来成为专家.我遇到了一个用于验证密码强度的正则表达式,但它包含了一些我不熟悉的正则表达式概念.正则表达式是:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}$
Run Code Online (Sandbox Code Playgroud)
并且用简单的英语表示该字符串必须包含至少一个小写字符,一个大写字符和一个数字,并且该字符串的长度必须至少为六个字符.任何人都可以为我解释这个模式实际上如何描述这个规则吗?我看到一个字符串char ^的开头和字符串char $的结尾,三个带有lookaheads的组,一个匹配任何字符.并重复{6,}.
感谢任何可以帮助我理解这一点的正则表达大师.
我确信这是一个常见的操作,但我很难解决问题.这<select>是网页上的两个问题,其中一个依赖于另一个可能的值列表.
我有一个下拉列表,其中包含网页上的子状态代码,其可能值列表取决于包含状态代码的页面上另一个下拉列表中的选择.在我的控制器中,我从数据库中检索可能的状态代码列表,并将值放在DropDownList HTMLHelper用于在视图中构建我的选择列表的SelectList中.我检索包含状态代码的模型记录,并使用该状态代码值来查找数据库中子状态的可能值,然后将该列表放在另一个SelectList中以获取第二个下拉列表.当用户在状态下拉列表中更改选择时,该页面向服务器发出ajax回调,以使用新的可能值列表重新填充子状态下拉列表.
空状态代码确实不是有效值,但这是一个质量控制应用程序,用于纠正此类问题.我的问题是,在模型上记录的当前状态代码可以有时是空的,所以我的第二个下拉子状态值的列表是空的.不幸的是,似乎无法创建一个空的SelectList传递给DropDownList HTMLHelper,但是当页面加载以支持我的ajax解决方案时,必须创建我的下拉列表.
有没有人制定出有效且超级光滑的方式来处理这种情况?或者,如果子状态SelectList为null,并且是否使用不同的HTML生成下拉列表,我是否需要求助于查看我的视图中的丑陋内容?在我生病的头脑中,能够生成一个空的SelectList以交给HTMLHelper似乎是一个合理的解决方案.我欢迎任何想法.
我在网上看到了一些文章,描述了如何在 Windows 服务应用程序中自行托管 ASP.NET Web API(请参阅此处和此处)。我在 VB.NET 中编写了一些简单的代码,以便在服务启动时启动自主机,并在服务停止时停止它,如下所示:
Protected Overrides Sub OnStart(ByVal args() As String)
Try
' init a new self host configuration using the base address
_config = New HttpSelfHostConfiguration(New Uri("http://localhost:8080"))
' map the URLs into the config
MapRoutes(_config)
_server = New HttpSelfHostServer(_config)
' start the server and wait for requests
_server.OpenAsync()
Catch ex As Exception
Throw
End Try
End Sub
Protected Overrides Sub OnStop()
Try
_server.CloseAsync().Wait()
_server.Dispose()
Catch ex As Exception
Throw
End Try …Run Code Online (Sandbox Code Playgroud) 使用我在最近的一个ASP.NET MVC书籍中找到的技术,我在控制器上有一个action方法,它返回ajax请求的部分视图和正常get请求的完整视图actionresult - 它检查IsAjaxRequest属性Request对象,用于确定要返回的action类型.action方法返回的局部视图返回HTML以显示数据库中的记录表.包含操作方法的控制器使用Authorize属性进行标记,以便只有登录的用户才能调用控制器的方法.我正在使用表单身份验证,超时和滑动到期时间为30分钟.
在达到用户30分钟超时后出现问题.由于控制器标有Authorize属性,因此在到期超时后调用action方法会将用户重定向到登录页面.但是,因为这是一个ajax调用,所以我的登录页面的html将返回并呈现在页面中间,该页面应包含通常由部分视图中的action方法返回的记录的HTML表.ajax调用并没有真正失败,只是返回错误页面的html.
有没有人遇到并处理过这个问题?我试图避免将处理ajax调用的所有服务器端代码移动到不需要经过身份验证的用户的单独控制器,但这似乎是我此时唯一的选择.即使这样也不会产生我期望的行为,因为即使在达到30分钟的超时后,它也会允许用户继续使用网页 - 它不会重定向到登录页面.
谢谢你的建议.
使用自定义AuthorizeAttribute的下面的解决方案似乎让我朝着正确的方向前进,但我甚至无法使用此代码.似乎在达到到期超时后永远不会到达自定义AuthorizeAttribute中的代码.似乎表单身份验证导致在属性代码之前很久才重定向到登录页面.自定义AuthorizeAttribute是我控制器上唯一的一个.我还有以下web.config值(超时值设置得非常低,以触发测试超时):
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1" slidingExpiration="true" defaultUrl="~/ErrorReport/Index" requireSSL="true" protection="All"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
<location path="Content">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="Scripts">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
是授权的web.config元素的方式获得?我不应该在ASP.NET MVC中使用它们吗?
我正在对新的ASP.NET Web API进行一些简单的测试,当从我的action方法返回可序列化的类或集合时,我遇到了以下问题.
我的班级看起来像这样:
<Serializable()>
Public Class Test
<XmlElement(ElementName:="Name")>
Public Property Name() As String = String.Empty
<XmlElement(ElementName:="ID")>
Public Property ID() As String = String.Empty
<XmlElement(ElementName:="ClassID")>
Public Property ClassID() As String = String.Empty
End Class
Run Code Online (Sandbox Code Playgroud)
我检索单个Test的测试操作方法如下所示:
Public Function GetTest(ByVal id As String) As Test
Dim newTest As Test = new Test() With {.ID = id, .Name = "My Test", .ClassID = System.Guid.NewGuid().ToString()}
return newTest
End Function
Run Code Online (Sandbox Code Playgroud)
当我在浏览器或Fiddler中将结果作为XML或JSON查看时,返回的Test类的属性名称已经为它们添加了unserscores,如下所示:
<Test>
<_ClassID>88bb191d-414c-45a4-8213-37f96c41a12d</_ClassID>
<_ID>ed853792-b7eb-4378-830b-1db611e12ec9</_ID>
<_Name>Another Test</_Name>
</Test>
Run Code Online (Sandbox Code Playgroud)
如何摆脱元素/属性名称上不需要的下划线?
谢谢!