0

null尽管我在文本框中输入了一些内容,但我在返回页面上的元素时遇到了问题。这是什么原因造成的?我想为最后一年制作一个带有仪表板的简单 CRUD 应用程序。

这是我的看法:

@model WebApplication1.Models.Category

@{
    ViewBag.Title = "Create Category";
}

<h2>@ViewBag.Title</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Name, htmlAttributes: new { @class 
        ="control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBoxFor(model => model.Name, new { htmlAttributes = 
            new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Name, "", new { 
            @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
} 

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

这是我的控制器操作:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Name")] Category category)
{
    if (ModelState.IsValid)
    {
        db.Categories.Add(category);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(category);
}
4

2 回答 2

2

我认为您需要发布到正确的 ActionName。您使用@using (Html.BeginForm()),它将发布到控制器的索引。但是你有Create。所以把表格指向那个。

@using (Html.BeginForm("Create", "Home", FormMethod.Post))
于 2019-01-27T12:23:49.827 回答
1

确保您首先设置了正确的视图模型属性:

public class Category
{
    public int ID { get; set; }

    public string Name { get; set; }
}

然后指向在BeginForm帮助器中处理 POST 动作的动作名称和控制器名称:

@* assumed the controller name is 'CategoryController' *@
@using (Html.BeginForm("Create", "Category", FormMethod.Post))
{
    // form contents
}

最后更改参数名称以避免默认模型绑定器中的命名冲突,也删除BindAttribute因为 POST 操作具有强类型视图模型类作为参数:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Category model)
{
    if (ModelState.IsValid)
    {
        db.Categories.Add(model);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}

相关问题:

POST 动作传递 null ViewModel

于 2019-01-28T02:26:27.573 回答