C# 视图返回空模型
我刚刚接触ASP.NET MVC,目前正在尝试解决一个无法解决的问题: 我正在尝试从数据库加载currentArea,并从中创建currentArea对象,如下所示:C# 视图返回空模型,c#,asp.net,asp.net-mvc,model-view-controller,C#,Asp.net,Asp.net Mvc,Model View Controller,我刚刚接触ASP.NET MVC,目前正在尝试解决一个无法解决的问题: 我正在尝试从数据库加载currentArea,并从中创建currentArea对象,如下所示: //My view ("PlayGame") @model SE2_S2P2_opdracht.Models.CurrentArea <html> <body> <div style="position:absolute; margin-top:8%; background-
//My view ("PlayGame")
@model SE2_S2P2_opdracht.Models.CurrentArea
<html>
<body>
<div style="position:absolute; margin-top:8%; background-color:dimgrey; border:solid thin; border-color:darkgrey; width:59.45%; height:20%; opacity: 0.9">
@if (Model.area.GoNorth(Model.area.NorthMap))
{
using (Html.BeginForm("NextArea", "Game", new { direction = "North" }, FormMethod.Post))
{
<div style="position:absolute;top:8%; left:7%;">
@Html.HiddenFor(m => m.area)
@Html.HiddenFor(m => m.player)
<input id="submit" type="submit" value="Go North" class="btn" />
</div>
}
}
</div>
</body>
</html>
按下按钮后,我得到一个空引用,表示我的CurrentArea(传递给控制器)为空。但是,它确实读取我的方向字符串
我的CurrentArea类只是一个包装器
public class CurrentArea
{
public Area area { get; set; }
public Player player { get; set; }
public Enemy enemy { get; set; }
public CurrentArea()
{
}
public CurrentArea(Area area, Player player)
{
this.area = area;
this.player = player;
}
我确保所有必需的类属性上也有“{get;set;}”。(至少是我在所需构造函数中使用的那些)
我想我错过了一些更有经验的程序员可以立即发现的东西。(通过使用@html.hiddenfor()我可以传递某些类对象/属性而不显示它们,对吗?
@html.hiddenfor
只呈现一个
)
因此,如果您想要发布一个复杂的对象,请确保为该对象的所有属性渲染隐藏字段,这些属性将被发回。我不知道你的区域
对象是什么样子,但大致如下:
@model CurrentArea
@* post back the properties of CurrentArea.area we are interested in *@
@Html.HiddenFor(m => m.area.Name)
@Html.HiddenFor(m => m.area.Id)
@Html.HiddenFor(m => m.area.Coordinates.X)
@* post back the properties of CurrentArea.player ... *@
@Html.HiddenFor(m => m.player.Name)
另请参见。您能看到实际发布的内容吗?调试器显示我的所有“CurrentArea”属性都返回为null。不过,问题现在已经解决了。:)这为我解决了问题。事后看来,这样想听起来也很合乎逻辑。谢谢你帮助我!
@model CurrentArea
@* post back the properties of CurrentArea.area we are interested in *@
@Html.HiddenFor(m => m.area.Name)
@Html.HiddenFor(m => m.area.Id)
@Html.HiddenFor(m => m.area.Coordinates.X)
@* post back the properties of CurrentArea.player ... *@
@Html.HiddenFor(m => m.player.Name)