【发布时间】:2018-01-19 07:59:52
【问题描述】:
我将数据从一个(模型)表插入到另一个,但它传递的是空值。
这是控制器的代码:
public ActionResult PendingBlogs()
{
OMSDataContext db = new OMSDataContext();
var query = from a in db.BlogApprovals
select a;
return View(query);
}
[HttpPost]
public ActionResult PendingBlogs(BlogApproval blogap)
{
OMSDataContext db = new OMSDataContext();
Blog b = new Blog
{
BlogTitle = blogap.BlogTitle1,
BlogContent = blogap.BlogContent1,
UserName = blogap.UserName1,
Date = blogap.Date1,
IsApproved = true
};
db.Blogs.InsertOnSubmit(b);
db.SubmitChanges();
return RedirectToAction("Index");
}
这是我的查看代码:
@model IEnumerable<MVCDemo.Models.BlogApproval>
@{
ViewBag.Title = "PendingBlogs";
}
<h2>PendingBlogs</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.BlogTitle1)
</th>
<th>
@Html.DisplayNameFor(model => model.BlogContent1)
</th>
<th>
@Html.DisplayNameFor(model => model.UserName1)
</th>
<th>
@Html.DisplayNameFor(model => model.Date1)
</th>
<th>
@Html.DisplayNameFor(model => model.IsApproved1)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.BlogTitle1)
</td>
<td>
@Html.DisplayFor(modelItem => item.BlogContent1)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserName1)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date1)
</td>
<td>
@Html.DisplayFor(modelItem => item.IsApproved1)
</td>
<td>
<form asp-controller="Admin" method="post">
<input type="submit" name="answer" value="RunRegisterdJob" />
</form>
</td>
</tr>
}
</table>
这两个模型(Blog 和 BlogApproval)是模型文件夹中的表。 BlogApproval 里面有数据,但由于某种原因它没有从表中返回数据。
我查看了this 线程,并重命名了 BlogApproval 表中的列,使其与 Blog 表中的列不同,但这并没有解决问题。
【问题讨论】:
-
你的表单没有表单控件——在请求中没有任何东西可以发送给控制器(除了提交按钮的值)!
-
好吧,那是我的错。所以我必须将表单控件应用于发送回控制器的所有数据?我应该用不同的视图创建一个新的操作方法吗?
-
@Html.DisplayFor不创建任何表单控件 - 它创建文本占位符(如div或span元素)。如果你想在 POST 请求中使用表单控件,请使用@Html.TextBoxFor、@Html.HiddenFor或任何可以生成表单控件的助手。 -
是的,但您似乎只想更新
IsApproved属性,所以您应该做的就是传回记录的ID(作为<form>中的路由值或者在表单中隐藏输入,然后在POST方法中,根据ID从db中获取记录并更新。 -
@StephenMuecke 抱歉,但我应该如何返回 ID?我应该把 @Html.HiddenFor(m => item.Id) 放在哪里?
标签: asp.net asp.net-mvc models controllers