Я создаю веб-приложение MVC для отображения вопросника для пользователя, чтобы он заполнил его и возвратил эти ответы в БД с помощью хранимой процедуры.
Вопросы задаются в БД, и я заполняю список общих моделей «Вопросов» для отправки в представление.
Проблема в том, что данные, которые я не связываю с "Html.EditorFor", теряются при отправке назад в контроллер (см. Скриншот).
Скриншот обратной передачи
Я не хочу отображать ненужную / конфиденциальную информацию в представлении, и мне не нужно показывать все свойства модели, но мне нужны данные в этих свойствах для отправки обратно в БД (например, TableID )
Модель
public class QuestionModel
{
public int ID { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
// Do not want to display these properties in the view
public int TableID { get; set; }
public string DBName { get; set; }
}
Контроллер
[HttpGet]
public ActionResult Index()
{
//I've hardcoded the model for this example, but
this data will be fetched from a DB via a stored procedure
List<QuestionModel> list = new List<QuestionModel>();
QuestionModel model1 = new QuestionModel
{
ID = 1,
Question = "What is your name?",
DBName = "Form 1",
TableID = 1
};
list.Add(model1);
QuestionModel model2 = new QuestionModel
{
ID = 2,
Question = "What is your favourite colour",
DBName = "Form 2",
TableID = 2
};
list.Add(model2);
return View(list);
}
[HttpPost]
public ActionResult Index(IList<QuestionModel> model)
{
//Call stored procedure to return user input to DB
return View();
}
View
@model IList<MVCQuestion.Models.QuestionModel>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
@{
using (Html.BeginForm())
{
for(int i = 0; i < Model.Count; i++)
{
<h2>@Model[i].Question</h2>
@Html.EditorFor(x => Model[i].Answer);
}
<input type="submit" value="Submit" />
}
}
</body>
</html>
«Хакерское» решение этой проблемы состоит в том, чтобы связать каждое свойство с «Html.EditorFor» и установить для этих полей «Только чтение» и «Скрытый», но мне кажется, что это плохое решение и серьезная угроза безопасности.
Есть ли лучшее решение для этого?