发布后模型为空

时间:2013-09-27 14:12:37

标签: asp.net-mvc asp.net-mvc-4

编辑:看来我以错误的方式解决了这个问题。我将解释我需要发生什么

这是我的模特:

public class  Items 
{
    public string ItemName { get; set; }
    public string Type { get; set; }
    public bool Picked { get; set; }
}

这是我的控制者:

public class InvoiceController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            using (TPGEntities context = new TPGEntities())
            {
                List<Items> result = (from a in context.IV00101
                                      select new Items { ItemName = a.ITEMDESC, Type = a.ITEMNMBR, Picked = false }).Take(10).ToList();

                return View(result);
            }
        }

        [HttpPost]
        public ActionResult Index(string searchTerm, IList<Items> model)
        {
            return View();
        }
    }

我的观点:

@model IList<SampleEnterprise.Models.Items>

@{
    ViewBag.Title = "Repair Invoicing";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Repair Invoicing</h2>

    @using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "partsList" }))
    {
        <input type="search" name="searchTerm" />
        <input type="submit" value="OK" />

        <div id="partsList">

            @foreach (var item in Model)
            {
                <h1>@item.ItemName</h1>
                <div>@item.Type</div>
                <div>
                    @if (@item.Picked)
                    {
                        <img src="~/Images/checkbox.png" />
                    }
                </div>
            }
        </div>
    }

基本上这就是我需要发生的事情:

  1. 用户转到页面。在我目前没有查看的文本框中,用户将输入一个数字。该数字将用于查找和返回实体框架中的数据。这个数据列表需要以某种方式临时存储。

  2. 我将在剃刀中使用for each循环来显示临时数据。

  3. 在搜索文本框中,用户将在临时数据中搜索项目编号。

  4. 如果项目编号在临时数据中退出,请将拾取设置为true。

  5. 重复操作,直到所有拾取的属性都设置为true。

4 个答案:

答案 0 :(得分:2)

您没有为Items创建任何输入元素,因此不会回发任何内容。

答案 1 :(得分:2)

如果您想要返回这些字段,则需要为它们创建隐藏字段。

@Html.HiddenFor(x => x.ItemName)

然后他们会按预期返回。

老实说虽然我可能只是在动作方法中填充模型,因为在帖子中你真正想要的就是搜索词。

答案 2 :(得分:2)

<h1>@item.ItemName</h1><div>@item.Type</div>只是变成纯文本(例如<h1>Item</h1>),并且一旦转换为HTML就没有绑定到模型。您需要将它们存储在控制器操作可以理解的内容中,例如使用@Html.HiddenFor(x => x.ItemName)或创建自己的HTML Helper,例如@ Html.DivFor。

答案 3 :(得分:1)

我已经看到了错误,您需要添加的所有内容都是隐藏字段,以便获取值。你可以在@Html.HiddenFor(x => x.ItemName)内做一些事情,因为你在表格中这样做了。