【发布时间】:2017-01-13 16:11:16
【问题描述】:
我使用 LINQ 更新了一条非常简单的记录。但是当我在GET 方法中获取该记录时,记录成功获取;但是,在POST 方法中,same 记录的GrantNumber 值显示为NULL,如下图1 和图2 所示。对于在 GET 和 POST 中显示不同值的主键 S_CPT_RCId 也是如此。 注意:图1中的快照取自GET方法的第二行,图2来自POST方法的输入参数(就在UPDATE之前):
控制器:
[HttpGet]
public async Task<ActionResult> TestMethod()
{
var qry = _context.AnnualReview.Where(g => g.GrantNumber == grantNum).SingleOrDefault();
return View(qry);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> TestMethod(AnnualReview test)
{
if (ModelState.IsValid)
{
var oRec = _context.AnnualReview.Where(g => g.GrantNumber == test.GrantNumber).SingleOrDefault();
oRec.RC_1a = test.RC_1a;
oRec.RC_1b = test.RC_1b;
oRec.RC_2a = test.RC_2a;
oRec.RC_2b = test.RC_2b;
oRec.RC_3a = test.RC_3a;
oRec.RC_3b = test.RC_3b;
oRec.RC_4a = test.RC_4a;
oRec.RC_5a = test.RC_5a;
oRec.RC_5b = test.RC_5b;
oRec.RC_6a = test.RC_6a;
oRec.RC_6b = test.RC_6b;
await _context.SaveChangesAsync();
return RedirectToAction("TestMethod2");
}
return RedirectToAction("TestMethod");
}
GET方法返回记录的快照(调试模式):
POST方法中SAME记录的快照(调试模式):
【问题讨论】:
-
你能发表你的看法吗?
-
在您看来,这些属性名称与控件的 name 属性完全匹配吗?确认一下,默认模型绑定器会查找确切的属性名称。
-
假设您正在执行的页面提交比 ajax 帖子更重要,可能的问题是您的视图可能没有名称为
GrantNumber和S_CPR_RCid的元素。尝试为此设置两个具有相应名称和值的隐藏字段 -
AnnualReview类的内容是什么?可能这些字段只是私有的 -
@Developer 每个人都帮我确定了问题。我认为
@Developer解释得最好。我将@BadDub的回复标记为Answer,因为他首先提出了正确的问题,要求我发布该视图。确实 - 正如@Developer和其他人所指出的那样 - 缺少View中的两个相关字段是问题的原因。我也支持其他人的回复/cmets,因为他们应得的。谢谢大家。
标签: c# asp.net-mvc linq asp.net-core