WorkContext.CurrentUser.~ 不可用

WorkContext.CurrentUser.~ not available

我有以下代码:

<input type="text" name="username" value="@WorkContext.CurrentUser.UserName"/>

然而,在我看来,当我尝试查看页面时出现以下错误:

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the 
current web request. Please review the stack trace for more information about 
the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to 
an instance of an object.

Source Error: 


Line 102:                <label for="textinput" class="control-label col-sm3">Notes</label>
Line 103:                <div class="col-sm-9">
Line 104:                    <textarea class="form-control" id="Notes">@port.Notes</textarea>
Line 105:                </div>
Line 106:            </div>

我尝试了以下方法来修复它:

    <input type="text"name="username"value="@(WorkContext.CurrentUser.UserName)"/>

并且还尝试将以下内容添加到我的视图顶部:

@using Orchard
@{
   WorkContext wContext = new WorkContext();
}

然后将我的初始代码更改为:

<input type="text" name="username" value="@wContext.CurrentUser.UserName"/>

但是,这给了我错误:

Cannot create an instance of the abstract class or interface 'WorkContext'

请问有人能给点建议吗?

编辑:这不是 port.Notes 变量的问题,如果我删除有关页面呈现的 workcontext 的代码,我完全删除了有关端口变量的代码然后它抛出相同的错误但是指向一个闭合的 curyl 大括号。为了证明这不是问题,我创建了一个新的 ActionResult 和视图,并且只包含 @using Orchard 和 @WorkContext.CurrentUser.UserName 但它仍然失败:Exception Details: System.NullReferenceException: Object reference not set to an instance一个对象。

正如 Chetan 已经回答的那样,您会得到最初的异常,因为 WorkContext.CurrentUsernull。原因很简单:没有当前用户,即没有经过身份验证的用户(您在未登录的情况下浏览该站点)。

这是正常的,您应该添加空检查作为最基本的措施来防止 NRE。

附带说明一下,确保检查您创建的输入字段以包含服务器端的实际当前用户。否则每个登录用户都可以编辑页面的 HTML 并更改值,例如允许他们post 在另一个用户名中。