Прежде всего, у меня есть такой класс:
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>