字符串作为模型

Las*_*Bye 20 asp.net-mvc asp.net-mvc-4

我认为这应该是一个更容易的任务:

编辑:

直到今天,Asp.Net MVC似乎无法在这种情况下提供一个简洁的解决方案:

如果你想传递一个简单的字符串作为模型,你不必定义更多的类和东西这样做... 任何想法?

将简单字符串作为模型传递


在这里我想要一个简单的字符串模型.

我收到这个错误:

"Value cannot be null or empty" / "Parameter name: name" 
Run Code Online (Sandbox Code Playgroud)

风景 :

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

控制者:

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();
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ete 48

将字符串作为模型传递到视图中的方法更为简洁.您只需在返回视图时使用命名参数:

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

  • 我想这应该被标记为答案,因为这个解决方案是对这里提出的问题的准确答案. (3认同)

And*_*tan 11

我知道你已经在这里接受了答案 - 我正在添加这个,因为使用字符串模型有一个普遍的问题.

作为MVC中的模型类型的字符串是一场噩梦,因为如果你在控制器中执行此操作:

string myStringModel = "Hello world";
return View("action", myStringModel);
Run Code Online (Sandbox Code Playgroud)

它最终选择了错误的重载,并将myStringModel作为主名称传递给视图引擎.

一般来说它仅仅是容易把它包在一个适当的型号,作为公认的答案说明,但你也可以简单地强制编译器选择正确的过载View()由字符串铸造object:

return View("action", (object)myStringModel);
Run Code Online (Sandbox Code Playgroud)

您在这里使用的另一个问题是使用TextBoxFor"未命名"模型的问题 - 您不应该对此感到惊讶...使用的唯一理由TextBoxFor是确保在基础值时正确命名字段以进行绑定是模型类型的属性.在这种情况下,没有名称,因为您将其作为视图的顶级模型类型传递 - 因此您可能会认为您不应该首先使用TextBoxFor()它.


Ant*_*t P 10

任一包装在一个视图模型对象的字符串:

模型:

public class HomeViewModel
{
    public string CodeText { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

private HomeViewModel _model;

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

[HttpGet]
public ActionResult Index()
{
    return View("Index", _model);
}
Run Code Online (Sandbox Code Playgroud)

视图:

@Html.TextBoxFor(m => m.CodeText);    
Run Code Online (Sandbox Code Playgroud)

使用EditorForModel:

@Html.EditorForModel()
Run Code Online (Sandbox Code Playgroud)