Получение нулевых значений из модели - PullRequest
0 голосов
/ 19 декабря 2018

Попытка заставить это работать, но продолжает получать нулевые значения от Модели.

Контроллер:

[HttpPost]
public ActionResult Index(OPISPriceReportOLY_Result model)
{
    if (ModelState.IsValid)
    {
        int id = model.orpid;

        using (var context = new IntranetCoreEntities())
        {
            var selected = context.OPISRetailPricings.Find(id);
            selected.DMarkup = model.DMarkup;
            selected.DSell = model.DSell;
            selected.RMarkup = model.RMarkup;
            selected.RSell = model.RSell;
            context.SaveChanges();
        }
    }

    return View("Index", model);
}

Представление:

@model IEnumerable<OPIS7.Models.OPISPriceReportOLY_Result>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@using (Html.BeginForm("Index", "OPISPriceReportOLY_Result", FormMethod.Post))
{
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.cpid)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Zone)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ZoneDescription)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Rack)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ActualProduct)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Cost)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.DMarkup)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.DSell)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.RMarkup)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.RSell)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.DateUpdated)
            </th>
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.cpid)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Zone)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ZoneDescription)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Rack)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ActualProduct)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Cost)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.DMarkup)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.DSell)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.RMarkup)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.RSell)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.DateUpdated)
                </td>
                <td>
                    <button type="submit">Update</button>
                </td>
            </tr>
        }

    </table>
}

Модель:

namespace OPIS7.Models
{
    using System;
    using System.ComponentModel.DataAnnotations;

    public partial class OPISPriceReportOLY_Result
    {
        [Key]
        public int orpid { get; set; }
        public int cpid { get; set; }
        public string Zone { get; set; }
        public string ZoneDescription { get; set; }
        public string Rack { get; set; }
        public string ActualProduct { get; set; }
        public Nullable<double> Cost { get; set; }
        public Nullable<double> DMarkup { get; set; }
        public string DSell { get; set; }
        public Nullable<double> RMarkup { get; set; }
        public Nullable<double> RSell { get; set; }
        public Nullable<System.DateTime> DateUpdated { get; set; }
    }
}

Согласно документации это должно работать, не прибегая к AJAX или JS, но я бью стену.Есть идеи?

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы просто хотите использовать один OPISPriceReportOLY_Result в методе действия, вам нужно переместить тег формы внутрь цикла.

Чистый подход - создать Partial View.Вы можете прочитать больше в книге Адама Фримена .

Index.cshtml

@model IEnumerable<OPISPriceReportOLY_Result>

<table class="table">
    @foreach (var item in Model)
    {
        @Html.Partial("_Result", item)
    }    
</table>

_Result.cshtml

@model OPISPriceReportOLY_Result

@using (Html.BeginForm("Update", "Home", FormMethod.Post))
{
    <tr>
        <td>
            @Html.DisplayFor(x => x.cpid)
            @Html.HiddenFor(x => x.cpid)
        </td>
        <td>
            @Html.DisplayFor(x => x.Zone)
            @Html.HiddenFor(x => x.Zone)
        </td>
        <td>
            @Html.DisplayFor(x => x.ZoneDescription)
            @Html.HiddenFor(x => x.ZoneDescription)
        </td>
        <td>
            @Html.DisplayFor(x => x.Rack)
            @Html.HiddenFor(x => x.Rack)
        </td>
        <td>
            @Html.DisplayFor(x => x.ActualProduct)
            @Html.HiddenFor(x => x.ActualProduct)
        </td>
        <td>
            @Html.DisplayFor(x => x.Cost)
            @Html.HiddenFor(x => x.Cost)
        </td>
        <td>
            @Html.TextBoxFor(x => x.DMarkup)
        </td>
        <td>
            @Html.TextBoxFor(x => x.DSell)
        </td>
        <td>
            @Html.TextBoxFor(x => x.RMarkup)
        </td>
        <td>
            @Html.TextBoxFor(x => x.RSell)
        </td>
        <td>
            @Html.DisplayFor(x => x.DateUpdated)
            @Html.HiddenFor(x => x.DateUpdated)
        </td>
        <td>
            <button type="submit">Update</button>
        </td>
    </tr>

}

Контроллеры

После обновления в базе данных вы не сможете return View("Index", model);.Индексное представление ожидает перечисления.Наилучшим подходом является повторное перенаправление на страницу индекса.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        List<OPISPriceReportOLY_Result> results = new List<OPISPriceReportOLY_Result>();
        results.Add(new OPISPriceReportOLY_Result { cpid = 1 });
        results.Add(new OPISPriceReportOLY_Result { cpid = 2 });
        results.Add(new OPISPriceReportOLY_Result { cpid = 3 });
        return View(results);
    }

    [HttpPost]
    public ActionResult Update(OPISPriceReportOLY_Result model)
    {
        if (ModelState.IsValid)
        {

            int id = model.orpid;

            using (var context = new IntranetCoreEntities())
            {
                var selected = context.OPISRetailPricings.Find(id);
                selected.DMarkup = model.DMarkup;
                selected.DSell = model.DSell;
                selected.RMarkup = model.RMarkup;
                selected.RSell = model.RSell;
                context.SaveChanges();
            }
        }

        return RedirectToAction("Index");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...