字符串作为模型

时间:2013-05-31 08:00:26

标签: asp.net-mvc asp.net-mvc-4

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

修改:

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

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

Pass simple string as a model


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

我收到此错误:

"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();
}

4 个答案:

答案 0 :(得分:45)

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

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

答案 1 :(得分:11)

我知道你已经在这里接受了答案 - 我正在添加这个,因为使用字符串模型会产生一般性问题。

作为MVC中的模型类型的字符串是一场噩梦,因为如果你在控制器中这样做:

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

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

一般来说,简单地将它包装在适当的模型类型中更容易,正如接受的答案所描述的那样,但您也可以通过将字符串转换为{{View()来强制编译器选择正确的重载object。 1}}:

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

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

答案 2 :(得分:10)

将字符串包装在视图模型对象中:

型号:

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()

答案 3 :(得分:0)

您可以简单地使用View()方法的重载。

View(string ViewName, object model)

在操作方法中,使用该签名调用View。

return View("MyView", myString);

在视图(.cshtml)中,将模型类型定义为字符串

@model string

然后,@Model将返回字符串(myString)。