asp.net-mvc – ASP.NET MVC – Html.Textbox()throws“对象引用未设置为对象的
|
我遇到一个奇怪的问题….当我使用UpdateModel()或TryUpdateModel(),一切正常.当我尝试绑定自己(例如MyObject.FirstName = collection [“FirstName”])时,我得到一个“对象引用未设置为对象的实例”错误. 这有点难以解释,所以我将介绍代码: [HandleError]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
Model.Event evnt = new Redline.RedlineTimeAttack.Model.Event();
//When this is uncommented everything works fine.
//TryUpdateModel<Model.Event>(evnt);
//this will eventually lead to problems
evnt.Description = collection["Description"];
evnt.EndDate = enddate;
evnt.EventName = collection["EventName"];
evnt.IsActive = collection["IsActive"].Contains("true");
evnt.StartDate = startdate;
evnt.TrackId = trackId;
evnt.WebContent = collection["WebContent"];
if (!evnt.IsValid)
{
foreach (var error in evnt.GetRuleViolations())
{
ModelState.AddModelError(error.PropertyName,error.ErrorMessage);
}
}
//If there are no validation issues then no problem,redirecttoaction
//works properly
if (ModelState.IsValid)
{
model.Events.InsertOnSubmit(evnt);
model.SubmitChanges();
ViewData["ControlMode"] = "Edit";
return RedirectToAction("Edit");
}
else //returning to View so that user can correct issues causes a null reference error in the view (bombs at first Html.Textbox("ControlName"))
{
ViewData["Tracks"] = GetTracks();
return View("Create",evnt);
}
}
这是堆栈跟踪: System.NullReferenceException was unhandled by user code Message="Object reference not set to an instance of an object." Source="System.Web.Mvc" StackTrace: at System.Web.Mvc.HtmlHelper.GetModelStateValue(String key,Type destinationType) at 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) at System.Web.Mvc.Html.InputExtensions.TextBox(HtmlHelper htmlHelper,String name) at ASP.views_event_create_aspx.__RenderContent2(HtmlTextWriter __w,Control parameterContainer) in d:TFSProjectsRedline Time AttackMainSourceRedline.RedlineTimeAttack.WebViewsEventCreate.aspx:line 18 at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) at System.Web.UI.Control.Render(HtmlTextWriter writer) at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) at ASP.views_shared_site_master.__Render__control1(HtmlTextWriter __w,Control parameterContainer) in d:TFSProjectsRedline Time AttackMainSourceRedline.RedlineTimeAttack.WebViewsSharedSite.Master:line 29 at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) at System.Web.UI.Page.Render(HtmlTextWriter writer) at System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) InnerException: 解决方法我在这里找到了一些洞察力: http://forums.asp.net/p/1396019/3006051.aspx
所以我更新了我的代码如下: ModelState.SetModelValue("Description",new ValueProviderResult(ValueProvider["Description"].AttemptedValue,collection["Description"],System.Globalization.CultureInfo.CurrentCulture));
ModelState.SetModelValue("EventName",new ValueProviderResult(ValueProvider["EventName"].AttemptedValue,collection["EventName"],System.Globalization.CultureInfo.CurrentCulture));
ModelState.SetModelValue("EndDate",new ValueProviderResult(ValueProvider["EndDate"].AttemptedValue,collection["EndDate"],System.Globalization.CultureInfo.CurrentCulture));
ModelState.SetModelValue("StartDate",new ValueProviderResult(ValueProvider["StartDate"].AttemptedValue,collection["StartDate"],System.Globalization.CultureInfo.CurrentCulture));
ModelState.SetModelValue("TrackId",new ValueProviderResult(ValueProvider["TrackId"].AttemptedValue,collection["TrackId"],System.Globalization.CultureInfo.CurrentCulture));
ModelState.SetModelValue("WebContent",new ValueProviderResult(ValueProvider["WebContent"].AttemptedValue,collection["WebContent"],System.Globalization.CultureInfo.CurrentCulture));
我这样做的原因是因为我想要一个.在我的业务对象中完成所有(或尽可能多的)验证,包括必填字段和b.我在验证摘要中想要我自己的邮件(例如“FieldX是必填字段”,而不是“需要一个值”).如果有更好的方法,请参阅我的另一个问题:ASP.NET MVC – Custom validation message for value types (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC数据类型ErrorMessage
- asp.net – 没有使用WebApi委托处理程序分配内部处理程序
- asp.net – WebAPI返回XML
- asp.net-mvc – 有条件地在webgrid中显示图像 – mvc 3
- asp.net-mvc-3 – 在MVC3中的WebGrid列中应用特定宽度
- ASP.Net:将客户端onClick添加到GridView中的HyperlinkFiel
- asp.net-core – ASP.NET Core中的System.Data.Entity.Spat
- asp.net-mvc – nhibernate:具有相同标识符值的不同对象已
- 使用ASP.NET Web API 2.1配置依赖注入
- asp.net – Jquery验证插件是否需要表单标记?
- asp.net-mvc-3 – 如何重定向到一个URL?
- asp.net – “无法启动IIS Express Web服务器”错
- asp.net-mvc – 为什么MVC4捆绑捆绑Knockout.js?
- asp.net – GridView中的工具提示
- ASP.NET Core RC2配置自定义AppSettings
- ASP.net RequiredFieldValidator VisualStudio 2
- asp.net-mvc – Razor模板,views和angular.js
- 更新映像而不会闪烁ASP.NET C#
- asp.net-mvc – 使用浏览器栏将列表传递给MVC We
- 在ASP.NET RadioButtonList ListItem上设置CSS类
