【问题标题】:ASP.NET MVC Create function not working on pageASP.NET MVC 创建功能在页面上不起作用
【发布时间】:2014-05-11 15:59:30
【问题描述】:

我创建了一个页面,该页面使用实体框架来检索/显示数据库中的信息我还在同一页面的部分视图中获得了创建功能,但它不保存/插入数据。

这是我的主页视图:

@model IEnumerable<TerminalHost.Models.buildingInfo>

@{
ViewBag.Title = "Home Page";
}
<h3>We suggest the following:</h3>
<ol class="round">
<li class="one">
    <h5>Please begin creating your network structure:</h5> <button id="modal-opener">Add a new building</button>

</li>
<li class="two">

</li>
</ol>

<div class="Container">

<div class="Box1">
    @foreach (var item in Model)
        {<div>
            <h4 class="Heading">@item.buildingName</h4>
            <h4 class="Heading">@item.buildingNumber</h4>
            <p>@item.buildingDesc1</p>
            <p>@item.buildingDesc2</p>
            <p>@item.buildingDesc3</p>
        </div>
        }
</div>
</div>

<div id="Modal" title="Building Details">
@Html.Partial("buildForm", new TerminalHost.Models.buildingInfo())
</div>

这是我的部分观点:

@model TerminalHost.Models.buildingInfo

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

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

<fieldset>
<legend>buildingInfo</legend>

<div class="editor-label">
    @Html.LabelFor(model => model.buildingNumber)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.buildingNumber)
    @Html.ValidationMessageFor(model => model.buildingNumber)
</div>
....
</div>
<p>
    <input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index") 
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

这是我的控制器:

public class HomeController : Controller
{
    thDB _db = new thDB();

    public ActionResult building()
    {
        var buildingModel = _db.buildings.ToList();//you have to remove the FirstOrDefault() extension method

        return View(buildingModel);
    }

    public ActionResult buildForm()
    {
        return PartialView();
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult buildForm(buildingInfo buildinginfo)
    {
        if (ModelState.IsValid)
        {
            _db.buildings.Add(buildinginfo);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }

        return PartialView(buildinginfo);
    }


    protected override void Dispose(bool disposing)
    {
        if(_db != null)
        {
            _db.Dispose();
        }
        base.Dispose(disposing);
    }
}

我试图复制与创建用于执行 CRUD 功能的脚手架模板相同的代码,但它们被分成不同的视图,而我希望它们都在一个页面上。

【问题讨论】:

  • 首先使用调试器。它是否输入了buildForm(buildingInfo buildinginfo)

标签: c# asp.net entity-framework asp.net-mvc-4 razor


【解决方案1】:

您需要的是告诉您的局部视图要调用的操作。 你能改变这一行吗:

 @using (Html.BeginForm())

 @using (Html.BeginForm("builForm","Home"))

在你的行动中:

HttpPost]
[ValidateAntiForgeryToken]
public ActionResult buildForm(buildingInfo buildinginfo)
{
    if (ModelState.IsValid)
    {
        _db.buildings.Add(buildinginfo);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

    return PartialView(buildinginfo);//instead of return this you can redirect to Index so you can see the update. Just a suggestion
}

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 2022-01-19
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多