View返回null模型

时间:2017-01-24 08:40:41

标签: 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-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>

所以当我按下Go North按钮时,它应该触发:
(总结:它应该基于视图传递的currentArea加载一个新的CurrentArea)

//My Controller ("GameController")
    public ActionResult NextArea(CurrentArea currentarea, string direction)
    {

        if (direction == "North")
        {
            return View("PlayGame", currentarea = new CurrentArea(AreaRepo.GetByNorthMap(currentarea.area), currentarea.player));
        }

按下按钮后,我得到一个空引用,说我的CurrentArea(传递给控制器​​)​​为空。但是,它会读取我的方向字符串。

My CurrentArea Class只是一个包装器

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;
    }

我确保所有必需的类属性都有&#34; {get;设置;}&#34;他们也是。 (我在必需的构造函数中使用的那些,至少)

我想我错过了一些经验丰富的程序员可以立即发现的东西。 (通过使用@html.hiddenfor()我可以传递某些类对象/属性而不显示它们,对吗?)

1 个答案:

答案 0 :(得分:1)

@PreAuthorize("#oauth2.hasScope('openid') and hasRole('ROLE_ADMIN')") @RequestMapping(value = "secret", method = RequestMethod.GET) @ResponseBody public String helloSecret(Principal principal) { return principal == null ? "Hello anonymous" : "S3CR3T - Hello " + principal.getName(); } 只呈现一个@Html.HiddenFor

因此,如果要发布复杂对象,请确保为该对象的所有属性呈现隐藏字段,并将其发回。我不知道你的<input type="hidden"/>对象是什么样的,但是这些内容是这样的:

Area

另见Extend hiddenfor templates in asp net mvc