Свойство Html.TextBoxFor объекта в списке - PullRequest
0 голосов
/ 06 июня 2019

Прежде всего, у меня есть такой класс:

class SomeClass
{
    public int FirstProperty { get; set; }
    public string SecondProperty { get; set; }
}

Тогда у меня есть такая модель:

class MyModel
{
    public int ID { get; set; }
    public List<SomeClass> CustomList = new List<SomeClass>();
}

Теперь я заполняю эту модель и передаю ее моему представлению, затем отображаю данные из нее. Мне удается отобразить данные из списка, но когда я изменяю их и начинаю обновлять (через форму) в отладчике только то, что List = null.

Вот код из вида

for(int i = 0; i < Model.CustomList.Count; i++)
{
    @Html.TextBoxFor(p => p.CustomList[i].FirstProperty, new { @type = "number" });<br />
}

Реальный код более сложен и содержит много ненужных строк, которые, я думаю, вам не нужны. В случае, если вы хотите здесь полный код (без функций)

Модель, которая передается в вид

public class ProizvodModel
{
    public int ROBAID { get; set; }
    public string KatBr { get; set; }
    public string Naziv { get; set; }
    public string Slika
    {
        get
        {
            if (_Slika == null || string.IsNullOrEmpty(_Slika))
                return "Logo_White_Stroke.png";
            else
                return _Slika;
        }
        set
        {
            _Slika = value;
        }
    }
    public IFormFile iff_Slika { get; set; }
    public int PodgrupaID { get; set; }
    public string Redirect { get; set; }
    public int Klasifikacija { get; set; }
    public string JM { get; set; }
    public int Cenovnik_GrupaID { get; set; }
    public List<CenovnikModel> Cene;
    public bool Aktivan { get; set; }
    public double PDV { get; set; }
    public double TransportnoPakovanje { get; set; }
    public int New { get; set; }
    public int DisplayIndex { get; set; }

    private string _Slika;

    public enum Klasa
    {
        Hobi = 0,
        Standard = 1,
        Profi = 2
    }
}

Модель класса Ценовник

public class CenovnikModel
{
    public int RobaID { get; set; }
    public int Nivo { get; set; }
    public double VPCena { get; set; }

    public enum Level
    {
        Iron = 0,
        Silver = 1,
        Gold = 2,
        Platinum = 3
    }
}

View

@model ProizvodModel
@{
    ViewData["Title"] = "Edit";
}
<style>

    select {
        font-size: x-large;
        background-color: lightcoral;
    }

    input {
        margin-left: 10px;
        padding-left: 10px;
    }

    input:read-only {
        background-color: lightgoldenrodyellow;
        border: 1px solid;
    }

    .ActiveProizvod {
        border: 5px solid green !important;
        padding: 10px;
        background-color: #d9f9d9;
    }

    .NotActiveProizvod {
        border: 5px solid red !important;
        padding: 10px;
        background-color: lightcoral;
    }
</style>
@{
    string borderColor = "NotActiveProizvod";
    if (Model.Aktivan)
    {
        borderColor = "ActiveProizvod";
    }
}
<div style="width: 1100px; margin: 20px auto; position: relative; border: 2px solid" class="@borderColor">
    <br />
    @if (!Model.Aktivan)
    {
        <button type="button" onclick="AktivirajProizvod(@Model.ROBAID)"><img src='/Images/checkmark.png' style='height: 20px'> <span style="font-weight: bolder">Aktiviraj proizvod</span></button><br /><br />
    }
    else
    {
        <button type="button" onclick="DeaktivirajProizvod(@Model.ROBAID)"><img src='~/Images/x-mark.png' style='height: 20px'> <span style="font-weight: bolder">Deaktiviraj proizvod</span></button><br /><br />
    }

    @using (Html.BeginForm("Save", "Proizvodi", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <label>RobaID: </label>@Html.TextBoxFor(c => c.ROBAID, new { @readonly = "true", @style = "width: 50px; text-align: center; padding: 0" }) <br />
        <label>KatBr: </label>@Html.TextBoxFor(p => p.KatBr, new { @style = "width: 200px" })<br />
        <label>Naziv: </label>@Html.TextBoxFor(p => p.Naziv, new { @style = "width: 300px" })<br />
        <label>JM: </label>@Html.TextBoxFor(p => p.JM, new { @style = "width: 50px; text-align: center; padding: 0" })<br />
        <label>Redirect: </label>@Html.TextBoxFor(p => p.Redirect, new { @style = "width: 200px" })<br /><br />
        <img src="@Model.Slika" id="Slika_i" style="max-width: 200px; border: 2px solid; padding: 5px" /><br /><br />
        <label>Podgrupa: </label>@Html.DropDownListFor(p => p.PodgrupaID, new SelectList(PodgrupaModel.List(), "PodgrupaID", "Naziv"))<br />
        <label>Klasifikacija: </label>@Html.DropDownListFor(p => p.Klasifikacija, new SelectList(new List<Tuple<int, string>>() { new Tuple<int, string>(0, "HOBI"), new Tuple<int, string>(1, "STANDARD"), new Tuple<int, string>(2, "PROFI") }, "Item1", "Item2"))<br />
        <label>Cenovna grupa: </label>@Html.DropDownListFor(p => p.Cenovnik_GrupaID, new SelectList(CenovnikGrupaModel.List(), "ID", "Naziv"));<br />

        <h2>Cene (bez PDV):</h2>
        Model.UcitajCene();

        for(int i = 0; i < Model.Cene.Count; i++)
        {
            <h3>@((CenovnikModel.Level)Model.Cene[i].Nivo)</h3>@Html.TextBoxFor(p => p.Cene[i].VPCena, new { @type = "number" });<br />
        }

        <div style="position: absolute; right: 0; top: 20px">
            <button id="Save_btn"><img src="~/images/save.png" style="height: 50px" /></button>
        </div>
    }
</div>

<div id="Gallery">
</div>

<div id="AB">
</div>

<script src="~/js/FileUploader.js"></script>
<script src="~/js/AlertBox.js"></script>
<script>

    var alb = new AlertBox($("#AB"));
    var ImagesArray = [];

    @foreach(string s in Galerija.Slike())
    {
        @:ImagesArray.push(`@s`);
    }
    var gal = new Gallery($("#Gallery"), ImagesArray, "/Images/");

    function DeaktivirajProizvod(RobaID) {
        $.ajax({
            type: "GET",
            url: "/Proizvodi/DeaktivirajProizvod",
            contentType: "application.json; charset-utf-8",
            dataType: "json",
            async: false,
            data: {
                "RobaID": RobaID
            },
            success: function () {
                alert("Proizvod deaktiviran!");
                window.location.reload();
            },
            error: function () {
                alert("Error");
            }
        });
}
    function AktivirajProizvod(RobaID) {
        $.ajax({
            type: "GET",
            url: "/Proizvodi/AktivirajProizvod",
            contentType: "application.json; charset-utf-8",
            dataType: "json",
            async: false,
            data: {
                "RobaID": RobaID
            },
            success: function () {
                alert("Proizvod aktiviran!");
                window.location.reload();
            },
            error: function () {
                alert("Error");
            }
        });
    }

    $(function () {
        $("#Slika_i").click(function () {
            gal.Show(function (src) {
                $("#Slika_i").attr("src", src);
                $.ajax({
                    type: "GET",
                    url: "/Proizvodi/AzurirajSliku",
                    contentType: "application.json; charset-utf-8",
                    dataType: "json",
                    async: false,
                    data: {
                        "ROBAID": @Model.ROBAID,
                        "Slika": src
                    },
                    success: function (data) {
                        alb.Show(data);
                    },
                    error: function (data) {
                        alb.Show(data);
                    }
                });
            });
        });
    });
</script>
...