我对使用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()我可以传递某些类对象/属性而不显示它们,对吗?)
答案 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