Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 从TempData asp.net mvc 2获取自定义类型_Asp.net Mvc 2_Tempdata - Fatal编程技术网

Asp.net mvc 2 从TempData asp.net mvc 2获取自定义类型

Asp.net mvc 2 从TempData asp.net mvc 2获取自定义类型,asp.net-mvc-2,tempdata,Asp.net Mvc 2,Tempdata,我有一个自定义类MyCustomType。在该类中,我有一个类型为bool的属性MyCustomProperty和另一个类型为bool的属性MyCustomProperty1 我需要检查MyCustomProperty在我的视图中是否为true。我正在做以下事情: <%if ( TempData[ViewDataConstants.MyCustomTypeKey] != null && ((MyCustomType)TempData[ViewDataConstants.My

我有一个自定义类MyCustomType。在该类中,我有一个类型为bool的属性MyCustomProperty和另一个类型为bool的属性MyCustomProperty1

我需要检查MyCustomProperty在我的视图中是否为true。我正在做以下事情:

<%if ( TempData[ViewDataConstants.MyCustomTypeKey] != null && ((MyCustomType)TempData[ViewDataConstants.MyCustomTypeKey]).MyCustomProperty %>show some custom content.
显示一些自定义内容。
但由于某种原因,当我运行它时,我看到一条错误消息,MyCustomTYpe找不到您是否缺少程序集引用bla bla bla。MyCustomType在我的控制器中,它是公共的,为了检查,我甚至添加了对视图的引用。但它一直说没有MyCustomType类。我做错了什么

有趣的是,出于某种原因,当我将它从控制器名称空间移动到公共名称空间时,它突然起作用了。仍然不明白为什么它在控制器名称空间中不工作。
这两个名称空间都显式地包含在视图中。

不知道为什么它不起作用,但老实说,在视图中包含所有这些代码在我看来是错误的。也许它和我一样,VisualStudio不喜欢在视图中编写C代码:-)

这应该是视图模型上的一个属性:

public class MyViewModel
{
    public bool MyCustomProperty { get; set; }
}
在控制器内部:

public ActionResult Foo()
{
    var model = TempData[ViewDataConstants.MyCustomTypeKey] as MyCustomType ?? new MyCustomType();
    var viewModel = Mapper.Map<MyCustomType, MyViewModel>(model);
    return View(viewModel);
}
public ActionResult Foo()
{
var model=TempData[ViewDataConstants.MyCustomTypeKey]作为MyCustomType??新的MyCustomType();
var viewModel=Mapper.Map(模型);
返回视图(viewModel);
}
最后在你的视野内:

<% if (Model.MyCustomProperty) { %>
    show some custom content.
<% } %>

显示一些自定义内容。

现在你不再需要任何使用,铸件。。。在视图中。

谢谢你的提示,达林。我考虑过这种方法,让我怀疑的是,我的ViewModels是DTO,它们只展示了我认为应该拥有的东西(拒绝它还不是一个好主意),ViewData也应该以某种方式使用。但在这个场景中,您似乎只能使用模型本身。我想到的另一种方法是使用ViewData.Model。你觉得怎么样?