Я новичок в MVC. Теперь я пытаюсь с простой демонстрацией MVC, чтобы распечатать информацию Клиента, чтобы отобразить и обновить его, отправить обратно в базу данных.Свойство модели становится нулевым при публикации
Я понятия не имею, почему Идентификатор Клиента становится нулевым, а остальные - точными.
Я хочу отобразить идентификатор клиента на экране, но я не хочу, чтобы пользователь редактировал его для публикации в моей базе данных. Я исследовал это в течение нескольких часов теперь ..
мой код:
Customer.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace PeopleManagement.Models
{
public class Customer
{
[Required]
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public Customer()
{
}
public Customer(string id, string name, int age)
{
Id = id;
this.Name = name;
this.Age = age;
}
}
}
Index.cshtml
@using System.Web.UI.WebControls
@using PeopleManagement.Models
@model IList<Customer>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>First MVC Application</title>
<link href="@Url.Content("~/Content/css/customized-table.css")" rel="stylesheet" type="text/css" />
</head>
<body style="max-width:100%; max-height:100%">
<div id="pageTitle" style="text-align:center; color:red; font-size:24px; font-weight:bold;">Customer Management</div>
@using (@Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div id="tablePanel" style="padding-top: 15px">
<table class="customized_table" border="1">
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
@{
for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(model => model[i].Name);
</td>
<td>
@Html.TextBoxFor(model => model[i].Name, new {@style = "min-width:100%; text-align:center", @disable = "true"})
</td>
<td>
@Html.TextBoxFor(model => model[i].Age)
</td>
</tr>
}
}
</table>
</div>
<div>
<p><input type="submit"/></p>
</div>
}
</body>
</html>
<script>
</script>
HomeController. cs
using System.Collections.Generic;
using System.Web.Mvc;
using PeopleManagement.Models;
namespace PeopleManagement.Controllers
{
public class HomeController : Controller
{
public List<Customer> CustomersList { get; private set; } = new List<Customer>(5);
[HttpGet]
public ActionResult Index()
{
CustomersList.Add(new Customer("ID_1", "Name_1", 1));
CustomersList.Add(new Customer("ID_2", "Name_2", 2));
CustomersList.Add(new Customer("ID_3", "Name_3", 3));
ModelState.Clear();
return View(CustomersList);
}
[HttpPost]
public ActionResult Index(List<Customer> postbackCustomers)
{
if (!ModelState.IsValid)
return View(CustomersList);
CustomersList = postbackCustomers;
return View(CustomersList);
}
}
}
Может ли кто-нибудь помочь?
Помимо включения скрытого ввода, как указано в ответах ниже (1) У вас не должно быть как скрытого ввода, так и текстового поля для свойства 'Name'. Я предполагаю, что вы пытаетесь отключить текстовое поле, которое '@disable =" true "' не будет делать (его 'disabled =" disabled "'), но просто сделайте его 'readonly =" readonly "и удалите скрытый ввод. (2) 'ModelState.Clear();' бессмысленно - ничто не было добавлено в 'ModelState' в вашем методе GET. (3) 'return View (CustomersList);' не имеет смысла - зачем вам возвращать пустой список, если модель недействительна. –