如何在ASP.NET MVC5中从控制器传递字符串到视图

3
我有这个控制器:
public ActionResult MyController(string myString)
{
    return View((object)myString);
}

我正在尝试像这样将字符串传递给视图:

@model string
@Html.EditorFor(m => m)

我收到了“值不能为 null”错误。我该如何解决?谢谢。

请参考这个问题/答案来处理此事。 - user3559349
2个回答

7

首先,我建议更改你的Action方法名称。为什么要叫做MyController呢?它应该是一个有意义的方法名称。

然后看看你的问题。如果你的视图只用于显示目的,而不是用于表单提交,那么你可以将字符串绑定在viewbag中,并在视图中呈现。

例如,在你的Action方法中:

ViewBag.MyString = myString;

在您看来,

<p>@ViewBag.MyString</p>

但是如果您想在视图中编辑字符串,并在单击提交按钮后将值发布到服务器,则应创建一个视图模型。例如:

public class MyStringModel
{
  public string MyString { get; set; }
}

在您的操作方法中,
public ActionResult MyController(string myString)
{
  MyStringModel = new MyStringModel();
  MyStringModel.MyString = myString;
  return View(MyStringModel)
}

那么在您的看法中,

@model MyStringModel
@Html.EditorFor(m => m.MyString)

看,你需要在你的视图中添加@HTML.BeginForm和一个提交按钮回传你的字符串数据。
希望能对你有所帮助。

3
此外,您可以使用不同信息生命周期的ViewBag、ViewData、TempData来将信息传递到视图中。请参考以下链接:http://royalarun.blogspot.com.ar/2013/08/viewbag-viewdata-tempdata-and-view.html
在您的示例中,模型与字典相关联,因此不能直接使用属性。如果您只想从控制器传递一个字符串,可以像这样操作:
public ActionResult MyController(string myString)
{
    return View(model:myString);  
}

如果您使用C#,则需要在.cshtml文件中进行操作。

@model string
@{
    var text = Model;
}
@Html.EditorFor(m => text);

但是我认为更好的解决方案是传递一个带有字符串属性的视图模型,就像 @Stephen Muecke 的回答中所述。Asp.net MVC中预填充Html编辑器


错误 - 它确实需要转换为“对象”(否则会调用参数为视图名称的重载)。 - user3559349
是的,你说得对,但在这个例子中我使用了模型参数声明,请再看一遍 :) @ Stephen Muecke - Dei Revoledo
没问题,但是你的第一句话是错误和误导性的(楼主的用法是正确的)! - user3559349
那个 View(model:myString) 真的帮了我很大的忙。我试图按照微软文档(https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-5.0)创建一个简单的 PartialView 示例,但是我遇到了一个非常奇怪的错误,即使我的 Action(GetBook)和 Views 目录 \Download 确实存在,但 dotnet core MVC 应用程序仍然报错说找不到 View -- 我试图将字符串传递给 View(),但它却将该字符串作为视图文件名使用。非常奇怪,但这让我终于解决了问题。谢谢。你在哪里找到这个语法的? - raddevus
好的,我明白了:model是View()构造函数中的命名参数--https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controller.view?view=aspnetcore-5.0#Microsoft_AspNetCore_Mvc_Controller_View 谢谢。 - raddevus
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接