加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC验证针对空列表框抛出NullReferenceE

发布时间:2020-12-16 06:35:23 所属栏目:asp.Net 来源:网络整理
导读:我有两个列表框,一个用于可用服务器,另一个用于选定服务器.用户将项目从第一个框移动到第二个框以指示他们的选择. table id="ServerLists" style="width: 100%;" tr td style="width: 40%;" %=Html.ListBox("AvailableServerList",Model.AvailableServerList
我有两个列表框,一个用于可用服务器,另一个用于选定服务器.用户将项目从第一个框移动到第二个框以指示他们的选择.

<table id="ServerLists" style="width: 100%;">
  <tr>
    <td style="width: 40%;">
      <%=Html.ListBox("AvailableServerList",Model.AvailableServerList,New With {.size = 8,.ondblclick = "addServer();"})%>
    </td>
    <td style="width: 20%;">
      <button type="button" onclick="addAll();">Add All &gt;&gt;</button>
      <button type="button" onclick="addServer();">Add &gt;</button>
      <button type="button" onclick="removeServer();">&lt; Remove</button>
      <button type="button" onclick="removeAll();">&lt;&lt; Remove All</button>
    </td>
    <td style="width: 40%;">
      <%=Html.ListBox("SelectedServerList",Model.SelectedServerList,.ondblclick = "removeServer();"})%>
    </td>
  </tr>
</table>

如果没有服务器添加到第二个列表框,我向ModelState添加一个错误.

问题是如果列表框中没有条目,MVC在使用验证警告呈现视图时会抛出NullReferenceException.

[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.SelectExtensions.SelectInternal(HtmlHelper htmlHelper,String optionLabel,String name,IEnumerable`1 selectList,Boolean allowMultiple,IDictionary`2 htmlAttributes) +155  
   System.Web.Mvc.Html.SelectExtensions.ListBox(HtmlHelper htmlHelper,Object htmlAttributes) +62  
   ASP.views_serveraccess_create_aspx.__RendercMain(HtmlTextWriter __w,Control parameterContainer) in C:Documents and SettingsnfosterMy DocumentsVisual Studio ProjectsClient Portal 3TrunksrcStargate3.WebViewsServerAccessCreate.aspx:148  
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) +256  
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19  
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10  
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) +27
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w,Control parameterContainer) in C:Documents and SettingsnfosterMy DocumentsVisual Studio ProjectsClient Portal 3TrunksrcStargate3.WebViewsSharedSite.Master:97
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) +256
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Control.Render(HtmlTextWriter writer) +10
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ICollection children) +134
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
   System.Web.UI.Page.Render(HtmlTextWriter writer) +29
   System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +57
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) +99
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) +1266

其他人遇到过这个问题吗?我可以尝试一些变通方法吗?如果没有做出选择,我可能不得不在那里插入[请选择一个服务器]条目,但是对此问题的修复将不胜感激.

编辑:根据要求添加了控制器操作

<AcceptVerbs(HttpVerbs.Post)> _
Function Create(ByVal collection As FormCollection) As ActionResult
  Dim acceptedFields() As String = {"StartTime","EndTime","ReasonForAccess","WorkToBeDone","RegressionPlan","Servers","AccessAccount","Password"}
  Dim accessRequest As New ServerAccessRequest
  UpdateModel(Of ServerAccessRequest)(accessRequest,acceptedFields)
  If accessRequest.IsValid Then
    'TODO: Do database stuff here
    Return View("AccessRequestConfirmation")
  Else
    For Each violation In accessRequest.GetRuleViolations
      ModelState.AddModelError(violation.PropertyName,violation.ErrorMessage)
    Next
  End If
  Return View(New ServerAccessViewModel(accessRequest))
End Function

解决方法

请参阅 release notes for ASP.NET MVC 2 Preview 1;显然这个(将null传递给模型状态时为NullReferenceException)是ASP.NET MVC中的一个已知错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读