我所有的文本框都返回null我应该怎么办?

时间:2019-01-27 05:35:25

标签: asp.net razor model-view-controller null html.textboxfor

即使我在文本框中输入了某些内容,我在页面上返回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);
}

2 个答案:

答案 0 :(得分:2)

我认为您需要发布到正确的ActionName。您使用@using (Html.BeginForm()),它将发布到控制器的索引中。但是您有Create。因此,将表格指向该页面。

@using (Html.BeginForm("Create", "Home", FormMethod.Post))

答案 1 :(得分:1)

确保首先设置正确的viewmodel属性:

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操作具有强类型化的viewmodel类作为参数:

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

    return View(model);
}

相关问题:

POST action passing null ViewModel