如何在ASP.NET MVC5中将字符串从Controller传递给View

时间:2017-04-09 18:22:49

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

我有这个控制器:

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

我试图将字符串传递给这样查看:

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

我得到的值不能为空错误。我怎样才能解决这个问题?感谢。

2 个答案:

答案 0 :(得分:4)

首先,我建议您更改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 button添加到post back字符串数据中。

希望它有所帮助。

答案 1 :(得分:-1)

此外,您可以使用ViewBag,ViewData,TempData将信息传递到您的视图,并使用不同的信息生命周期。

检查一下: http://royalarun.blogspot.com.ar/2013/08/viewbag-viewdata-tempdata-and-view.html

使用您的示例,模型与字典相关联,因此您无法直接使用此属性。

对于您的示例,只从控制器传递一个字符串,您可以这样做:     public ActionResult MyController(string myString)     {         return View(型号:myString);
    }

和.cshtml(如果你使用c#)

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

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