【问题标题】:How to pass a string from Controller to View in ASP.NET MVC5如何在 ASP.NET MVC5 中将字符串从控制器传递到视图
【发布时间】:2023-03-29 15:42:02
【问题描述】:

我有这个控制器:

public ActionResult MyController(string myString)
{
    return View((object)myString);
}

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

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

我得到 value can't be null 错误。我怎样才能解决这个问题?谢谢。

【问题讨论】:

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


【解决方案1】:

首先,我建议更改您的 Action 方法名称。为什么你把它命名为 MyController。它应该是一个有意义的方法名。

那就来看看你的问题吧。如果您的视图仅用于显示目的,而不是用于表单发布,那么您可以将您的字符串绑定到 viewbag 并在您的视图中呈现。

例如,在您的操作方法中,

ViewBag.MyString = myString;

在你看来,

<p>@ViewBag.MyString</p>

但是如果你想在视图中编辑你的字符串并且点击提交按钮后,它应该将值发布到服务器,然后创建一个view model,例如,

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.BeginFormsubmit buttonpost back你的字符串数据。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您还可以使用 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);  
    }
    

    在 .cshtml 中(如果你使用 c#)

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

    但我认为传递带有字符串属性的 viewMoedel 是一个更好的解决方案,例如 @Stephen Muecke 响应 Prefill Html Editor Asp.net MVC

    【讨论】:

    • 错误 - 它确实需要转换为 object(否则如果调用参数为视图名称的重载)
    • 是的,你是对的,但在示例中我使用模型参数声明,再看一遍:) @Stephen Muecke
    • 没关系,但是你的第一个陈述是错误的并且具有误导性(OP的用法很好)!
    • 也许我可以改变它不是真的必要,但对 OP 没问题? :)
    • 问题在于HtmlHelper 方法,解决方案是根据我对问题的评论中的链接使用视图模型:)
    猜你喜欢
    • 2019-04-25
    • 2017-02-21
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多