我显然在这里遗漏了一些东西,但我不能为我的生活弄明白什么。 我可以很好地填充模型并将其发送到视图,但在帖子上,大多数数据都是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);
}
}
}
}
答案 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
中。