将模型传递给控制器​​发送null

时间:2012-07-26 16:30:40

标签: asp.net-mvc-3 razor controller

我正在尝试将我的模型从视图传递到Controller。我的观点是强类型的。不知何故,当在控制器中调用“保存”操作方法时,我在属性值中得到“null”。我正在使用Asp.Net MVC 3

这就是我的View的样子:

@model MvcApplication2.Models.Event
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <title>AddNew</title>
</head>
<body>
    @using(Html.BeginForm("Save","Event",FormMethod.Post, Model))
    {
        <div>
            <p>@Html.LabelFor(m=>m.EventName) @Html.TextBoxFor(m=>m.EventName)</p>
            <p>@Html.LabelFor(m=>m.Venue) @Html.TextBoxFor(m=>m.Venue)</p>
            <p>@Html.LabelFor(m=>m.StartTime) @Html.TextBoxFor(m=>m.StartTime)</p>
            <p>@Html.LabelFor(m=>m.EndTime) @Html.TextBoxFor(m=>m.EndTime)</p>
            @Html.ActionLink("Save Event", "Save")
        </div>
        }
</body>
</html>

这就是EventController的样子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication2.Models;

namespace MvcApplication2.Controllers
{
    public class EventController : Controller
    {

        public string Save(Event eventModel)
        {
           //Here eventModel.EventName and rest of the properties are null.

            return "Saved";
        }

    }
}

这就是模型的样子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication2.Models
{
    public class Event
    {
        public string EventName { get; set; }
        public string Venue { get; set; }
        public string StartTime { get; set; }
        public string EndTime { get; set; }
    }
}

2 个答案:

答案 0 :(得分:1)

ActionLinks不提交表单。变化:

@Html.ActionLink("Save Event", "Save")

<input type="submit" value="Save">

此外,如果您在方法中添加[HttpPost],这会更加明显。

    [HttpPost]
    public string Save(Event eventModel)
    {
       //Here eventModel.EventName and rest of the properties are null.

        return "Saved";
    }

答案 1 :(得分:1)

ActionLink辅助方法呈现锚标记,这是一个链接。它不会提交表格。如Erik所说,您需要在表单中提交一个提交按钮。

如果您仍想保留链接而不是提交按钮,可以使用一些javascript代码提交表单

<script type="text/javascript"> 

    $(function(){
      $("#Save").click(function(){
         $(this).closest("form").submit();        
      });
    });

</script>