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

Я создаю веб-приложение 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» и установить для этих полей «Только чтение» и «Скрытый», но мне кажется, что это плохое решение и серьезная угроза безопасности.

Есть ли лучшее решение для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...