2016-12-27 149 views
0

计数pageloads我想算pageloads但我不断收到在浏览器上此错误消息:用asp.net mvc的核心

的NullReferenceException:未设置为一个对象的实例对象引用。 MoveNext在LoadPage.cshtml,第4行

任何想法为什么message1为空?

我的控制器代码:

public IActionResult LoadPage() 
    { 


     return View(); 
    } 

    [HttpPost] 
    public IActionResult LoadPage(Message message) 
    { 
     Message message1 = new Message(); 
     message1.Text = "Pageloads: "; 
     message1.Number += 1; 

     return View("LoadPage", message); 
    } 

而我的观点:

<form asp-controller="MyForms" asp-action="LoadPage" method="post"> 
<p>@Model.Text @Model.Number</p> 
<input id="btnLoad" type="submit" value="Click here to load page" /> 
</form> 
+0

您正在创建'message1'变量,但只是返回'message'参数。这很可能是错误的原因。 – Alejandro

回答

3

任何想法,为什么MESSAGE1为空?

它不为空。最有可能的message为空,因为您在控制器中获取它并将它传递给您的视图。

return View("LoadPage", message); 
1

你的观点是使用代码Model.Number,这意味着你需要通过Message类的非null对象。你可以在你的GET操作方法中做到这一点。

public IActionResult LoadPage() 
{ 
    var vm = new Message(); 
    return View(vm); 
} 

而且你不需要重新建立一个新的消息对象,你可以使用作为方法的参数之一。您还需要清除模型状态字典以查看更新的值。您可以使用ModelState.Clear()方法来执行此操作。

[HttpPost] 
public IActionResult LoadPage(Message message) 
{  
    message.Text = "Pageloads: "; 
    message.Number += 1; 
    ModelState.Clear(); 
    return View("LoadPage", message); 
} 
+0

如果使用了ModelState.Clear()方法,它应该修改'message'而不是'message1'。 – CodingYoshi

+0

是啊!复制粘贴错误!感谢您指出。现在修复。 – Shyju