MVC 4关于帖子的空数据

时间:2014-05-29 20:38:24

标签: asp.net-mvc

我显然在这里遗漏了一些东西,但我不能为我的生活弄明白什么。 我可以很好地填充模型并将其发送到视图,但在帖子上,大多数数据都是null或默认。

我强行使用/ Test / Create创建GET?a1 = 5& a2 = 6& shell = 7 这可以很好地初始化测试实体。 POST具有Name和CatId,但其他属性为null。

非常感谢任何帮助。

模型

namespace MyApp.Models
{
    public partial class TestEntity
    {
        [DisplayName("Entity Id")]
        [Required]
        public int? EntityId { get; set; }

        [Required]
        [DisplayName("Entity Name")]
        public string EntityName { get; set; }

        [DisplayName("Category Id")]
        [Required]
        public int? CatId { get; set; }

        [DisplayName("Attribute 1")]
        public int? Attribute1 { get; set; }

        [DisplayName("Attribute 2")]
        public int? Attribute2 { get; set; }        
    }
}

查看

@model MyApp.Models.TestEntity

<h2>Test</h2>
@using (Html.BeginForm())
{

    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    <p>
        @Html.LabelFor(model => model.EntityName)
        @Html.TextBoxFor(model => model.EntityName)
    </p>
    <p>
        @Html.LabelFor(model => model.CatId)
        @Html.TextBoxFor(model => model.CatId)
    </p>

    <p>
        @Html.LabelFor(model => model.Attribute1)
        @Html.DisplayFor(model => model.Attribute1)
    </p>

    <p>
        @Html.LabelFor(model => model.Attribute2)
        @Html.DisplayFor(model => model.Attribute2)
    </p>
    <input type="submit" value="Done" />

}

控制器

using System.Web.Mvc;
using MyApp.Models;

namespace MyApp.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Test/Create
        public ActionResult Create(int? a1, int? a2, int? shell)
        {
            using (var db = new MyDbContext())
            {
                ShellEntity temp =
                    db.ShellEntities.Where(se => se.ShellId == shell).FirstOrDefault();

            TestEntity model = new TestEntity();
            model.CatId = temp.category; //get the category id from the shell
            model.Attribute1 = a1;
            model.Attribute2 = a2;
            return View(model);
            }
        }

        //
        // POST: /Test/Create
        [HttpPost]
        public ActionResult Create(TestEntity model)
        {
            try
            {
                //at this point model.Attribute1 and Attribute2 are both null
                if (!model.Attribute1.HasValue)
                {
                    //WTF???
                }
                return View(model);
            }
            catch
            {
                return View(model);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您需要使用

@Html.HiddenFor(model => model.Attribute1)

将值传递给控制器​​而不是DisplayFor()

答案 1 :(得分:0)

更改此代码

<p>
    @Html.LabelFor(model => model.Attribute1)
    @Html.DisplayFor(model => model.Attribute1)
</p>

<p>
    @Html.LabelFor(model => model.Attribute2)
    @Html.DisplayFor(model => model.Attribute2)
</p>

到此:

<p>
    @Html.LabelFor(model => model.Attribute1)
    @Html.HiddenFor(model => model.Attribute1)
    @Html.DisplayFor(model => model.Attribute1)
</p>

<p>
    @Html.LabelFor(model => model.Attribute2)
    @Html.HiddenFor(model => model.Attribute2)
    @Html.DisplayFor(model => model.Attribute2)
</p>

它应该可以正常工作。

基本上它添加了<input name="Attribute1" value="your_value"/>,因此点击“提交”按钮后,它会包含在POST中。