Строка как модель - программирование
Подтвердить что ты не робот

Строка как модель

Я думал, что это была бы более простая задача:

Изменить:

Кажется, что в этот день Asp.Net MVC не смог бы обеспечить аккуратное решение в этом случае:

Если вы хотите передать простую строку в качестве модели, и вам не нужно определять больше классов и вещей для этого... Любые идеи?

Пропустить простую строку в качестве модели


здесь я пытаюсь создать простую строковую модель.

Я получаю эту ошибку:

"Value cannot be null or empty" / "Parameter name: name" 

Вид:

@model string
@using (Html.BeginForm())
{ 
        <span>Please Enter the code</span> 
        @Html.TextBoxFor(m => m) // Error Happens here
        <button id="btnSubmit" title="Submit"></button>
}

Контроллер:

public string CodeText { get; set; }

public HomeController()
{
    CodeText = "Please Enter MHM";
}

[HttpGet]
public ActionResult Index()
{
    return View("Index", null, CodeText);
}

[HttpPost]
public ActionResult Index(string code)
{
    bool result = false;
    if (code == "MHM")
        result = true;

    return View();
}
4b9b3361

Ответ 1

Либо завершает строку в объекте модели представления:

Модель:

public class HomeViewModel
{
    public string CodeText { get; set; }
}

Контроллер:

private HomeViewModel _model;

public HomeController()
{
    _model = new HomeViewModel { CodeText = "My Text" };
}

[HttpGet]
public ActionResult Index()
{
    return View("Index", _model);
}

Вид:

@Html.TextBoxFor(m => m.CodeText);    

Или используйте EditorForModel:

@Html.EditorForModel()

Ответ 2

Там намного более чистый способ передачи строки в качестве модели в ваше представление. Вам просто нужно использовать именованные параметры при возврате вашего представления:

[HttpGet]
public ActionResult Index()
{
    string myStringModel = "I am passing this string as a model in the view";
    return View(model:myStringModel);
}

Ответ 3

Я знаю, что вы уже приняли ответ здесь - я добавляю это, потому что есть общая информация, связанная с использованием строковой модели.

Строка как модельный тип в MVC - это кошмар, потому что если вы сделаете это в контроллере:

string myStringModel = "Hello world";
return View("action", myStringModel);

В результате получается неправильная перегрузка и передача myStringModel в качестве имени мастера в механизм просмотра.

В общем, проще просто обернуть его в подходящий тип модели, как описывает принятый ответ, но вы также можете просто заставить компилятор выбрать правильную перегрузку View(), введя строку в object:

return View("action", (object)myStringModel);

Другая проблема, с которой вы столкнулись при использовании TextBoxFor, имеющей проблемы с "неназванной" моделью - ну, вы не должны удивляться этому... Единственная причина использовать TextBoxFor - обеспечить поля названы правильно для привязки, когда базовое значение является свойством типа модели. В этом случае имя отсутствует, потому что вы передаете его как тип модели верхнего уровня для представления, поэтому вы можете утверждать, что не следует использовать TextBoxFor() в первую очередь.