【问题标题】:ASP.NET MVC: Model passing null to controllerASP.NET MVC:模型将 null 传递给控制器
【发布时间】: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 不创建任何表单控件 - 它创建文本占位符(如 divspan 元素)。如果你想在 POST 请求中使用表单控件,请使用@Html.TextBoxFor@Html.HiddenFor 或任何可以生成表单控件的助手。
  • 是的,但您似乎只想更新IsApproved 属性,所以您应该做的就是传回记录的ID(作为&lt;form&gt; 中的路由值或者在表单中隐藏输入,然后在POST方法中,根据ID从db中获取记录并更新。
  • @StephenMuecke 抱歉,但我应该如何返回 ID?我应该把 @Html.HiddenFor(m => item.Id) 放在哪里?

标签: asp.net asp.net-mvc models controllers


【解决方案1】:

你的表单标签不包含任何 html 输入值,所以不要使用下面的代码

<form asp-controller="Admin" method="post">
        <input type="submit" name="answer" value="RunRegisterdJob" />
</form>

使用下面的代码:

<form asp-controller="Admin" method="post">
       <input type="text" name="blogTitle1"/>
       <input type="text" name="blogContent"/>
       <input type="text" name="UserName1"/>
       <input type="submit" name="answer" value="RunRegisterdJob" />
</form>

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 2011-12-16
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多