gpt4 book ai didi

c# - 空引用异常 ASP.NET MVC 5

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:36 25 4
gpt4 key购买 nike

我有一个带有这个 Controller 的网络应用程序:

    public class ServiceRequestController : Controller
{

[Authorize(Roles = "Customer")]
public ActionResult Create()
{
return View();
}

[Authorize(Roles = "Customer")]
public ActionResult CreateNewUserAccount()
{
return View();
}

[Authorize(Roles = "Customer")]
[HttpPost]
public ActionResult CreateNewUserAccount(ServiceRequest serviceRequest)
{
if (ModelState.IsValid)
{
serviceRequest.Log.Id = User.Identity.GetUserId().ToString();
serviceRequest.Log.DateTimeLogged = System.DateTime.Now;
serviceRequest.LogID = db.Logs.Max(item => item.LogID);
serviceRequest.EstimatedResolveDate serviceRequest.CalculateEstimatedResolveDate();
db.ServiceRequests.Add(serviceRequest);
db.SaveChanges();
return RedirectToAction("AllServiceRequests", "Log");
}
return View(serviceRequest);
}

serviceRequest.Log.Id = User.Identity.GetUserId().ToString();(以及任何前面的行,如果这被注释掉)抛出空引用异常。我假设 serviceRequest 不知何故为空?

请求 CreateNewUserAccount() 页面的 ActionLink 是:

@Html.ActionLink("New User Account", "CreateNewUserAccount", "ServiceRequest")

我不确定如何解决这个异常?

模型是:

public partial class ServiceRequest
{
public int ServiceRequestID { get; set; }
public Nullable<int> LogID { get; set; }
public string RequestType { get; set; }
[DisplayName("Additional Information")]
[Required]
[StringLength(200)]
public string AdditionalInformation { get; set; }
public DateTime EstimatedResolveDate { get; set; }

[Required]
[DisplayName("Delivery Date")]
public DateTime DeliveryDate { get; set; }

public virtual Log Log { get; set; }


public DateTime CalculateEstimatedResolveDate()
{
return System.DateTime.Now.AddDays(3);
}

}

查看代码:

@model OfficiumWebApp.Models.ServiceRequest

@{
ViewBag.Title = "New User Account";
}
@using(Html.BeginForm("CreateNewUserAccount", "ServiceRequest", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true)

<div class="form-group">
@Html.LabelFor(model => model.RequestType, new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBoxFor(model => model.RequestType, new { @Value = ViewBag.Title, @readonly = "readonly" })
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>

<div class="form-group">
@Html.Label("Name of Account Holder", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("AccountName")
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>

<div class="form-group">
@Html.Label("Department", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("Department")
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>

<div class="form-group">
@Html.Label("Location", new { @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.TextBox("Location", null, new { id = "Location" }))
@Html.ValidationMessageFor(model => model.RequestType)
</div>
</div>
</div>


<div class="form-group">
@Html.LabelFor(model => model.AdditionalInformation, new { @class = "control-label col-md-2" })
<div class="tags">
<div class="col-md-10">
@Html.TextAreaFor(model => model.AdditionalInformation)
@Html.ValidationMessageFor(model => model.AdditionalInformation)
</div>
</div>
</div>

<div class="form-group">
@Html.LabelFor(model => model.DeliveryDate, new { @id = "VisitDateLabel", @class = "control-label col-md-2" })
<div class="col-md-3">
<div class="editor-field">
@Html.JQueryUI().DatepickerFor(model => model.DeliveryDate).Inline(false)
@Html.ValidationMessageFor(model => model.DeliveryDate)
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-floppy-save"></span></button>
</div>
</div>
</div>
}

最佳答案

您需要返回 View 即

[Authorize(Roles = "Customer")]
public ActionResult CreateNewUserAccount()
{
var model = new ServiceRequest();
model.Log = new Log();
return View(model);
}

在您看来,您还需要在顶部添加模型引用,即

@model ServiceRequest

您还可以在模型中初始化 Log 对象,如下所示:

public class ServiceRequest
{
public ServiceRequest()
{
Log = new Log();
}

....
}

操作链接不会将您的模型发回,您需要将其包含在表单中并包含您希望在客户端更新的所有模型值,即

@using (Html.BeginForm("CreateNewUserAccount", "ServiceRequest", FormMethod.Post)){

@Html.EditorFor(m => m.AdditionalInformation)
...
<input type="submit" value="submit" />

更新

根据下面的评论,这已通过在帖子上创建新日志来解决,即

 var log = new Log { 
Id = User.Identity.GetUserId().ToString(),
DateTimeLogged = System.DateTime.Now,
LogID = db.Logs.Max(item => item.LogID) };
serviceRequest.Log = log;

关于c# - 空引用异常 ASP.NET MVC 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com