Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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
C# 在MVC中应该在哪里进行计算?_C#_Asp.net Mvc_Razor_Model View Controller_Visual Studio 2013 - Fatal编程技术网

C# 在MVC中应该在哪里进行计算?

C# 在MVC中应该在哪里进行计算?,c#,asp.net-mvc,razor,model-view-controller,visual-studio-2013,C#,Asp.net Mvc,Razor,Model View Controller,Visual Studio 2013,我需要对从SQL server提取的数据执行一些转换计算。看起来最好的地方是在我浏览收藏时的视图中,但我不确定这是否是最佳实践。此外,我不知道如何在视图中进行操作。 我对这一点还比较陌生,而且正在慢慢地学习,所以我甚至不确定要完成我要做的事情的语法 一如既往,我们非常感谢您的帮助 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true"> @foreach (v

我需要对从SQL server提取的数据执行一些转换计算。看起来最好的地方是在我浏览收藏时的视图中,但我不确定这是否是最佳实践。此外,我不知道如何在视图中进行操作。 我对这一点还比较陌生,而且正在慢慢地学习,所以我甚至不确定要完成我要做的事情的语法

一如既往,我们非常感谢您的帮助

   <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">

    @foreach (var item in Model.OR_OP)
    {
        <div class="panel panel-default">
            @Html.Raw("<div class=\"panel-heading\" role=\"tab\" id=\"heading")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\">")
            <h4 class="panel-title">
                @Html.Raw("<a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapse")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\" aria-expanded=\"true\" aria-controls=\"collapse")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\">")

                @Html.DisplayFor(modelitem => item.NAME)

                -
                @Html.DisplayFor(modelitem => item.DESCR)

                @Html.Raw("</a>")

            </h4>

            <div>
                <div class="btn-custom-start">Start</div>
            </div>
            <div>
                <div class="btn-custom-stop">Stop</div>
            </div>


            @Html.Raw("</div>")
            @Html.Raw("<div id=\"collapse")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\" class=\"panel-collapse collapse collapse\" role=\"tabpanel\" aria-labelledby=\"heading")@Html.DisplayFor(modelitem => item.NAME)@Html.Raw("\">")
            <div class="panel-body">
                @Html.DisplayFor(modelitem => item.PWPLACE)
                @Html.DisplayFor(modelitem => item.PPARTS)
                @Math(item.PTE.Value/60) <------ this is where I would like to do the calculation.
                @Html.DisplayFor(modelitem => item.PTE)
                @Html.DisplayFor(modelitem => item.PTR)

            </div>
            @Html.Raw("</div> ")
        </div>

    }

</div>

@foreach(模型中的var项或_OP)
{
@Html.Raw(“item.NAME)@Html.Raw(“\”>”)
@Html.Raw(“”)
开始
停止
@Html.Raw(“”)
@Html.Raw(“item.NAME)@Html.Raw(\”class=\”panel collapse\”role=\“tabpanel\”aria labelledby=\“heading”)@Html.DisplayFor(modelitem=>item.NAME)@Html.Raw(\”>)
@DisplayFor(modeleItem=>item.PWPLACE)
@DisplayFor(modelitem=>item.ppart)
@数学(item.PTE.Value/60)item.PTE)
@DisplayFor(modeleItem=>item.PTR)
@Html.Raw(“”)
}

在这种情况下,您可以在
模型中进行计算。我建议您在
模型
类中添加一个属性,例如:

public PropertyName
{
    get
    {                
        return @Math(this.PTE.Value/60);
    }
}

任何逻辑类型的操作都应该在
控制器中执行。然后,应通过
控制器将结果保存到
视图模型
。应该在
视图中使用
模型
,以便显示对数据执行的某种操作的结果。其思想是
控制器
更改
视图模型
,如果合适,更改
实体模型

如果您有
实体模型,则应根据您的
实体模型设置
控制器中的
视图模型
。如果您使用的是DDD,那么许多
控制器的
逻辑应该位于
域模型
中,这当然是适用于域的逻辑,例如计算

看起来您正在使用实体框架。如果您在顶部链接的页面上阅读:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// 
//此代码是从模板生成的。
//
//手动更改此文件可能会导致应用程序出现意外行为。
//如果重新生成代码,将覆盖对此文件的手动更改。
// 
//------------------------------------------------------------------------------
我认为您的模型是从
Q-MakModel.Context.tt
文件生成的。确保
上下文
文件包含这两个属性,因为每次EF重新生成模型时,如果模板中不存在这些属性,它将删除它们。另一个要考虑的问题是,我不会在<代码> UI <代码>代码> >视图< /代码>中使用<代码>实体模型<代码>。我会使用自定义的
视图模型

然后在
控制器中
视图模型
映射到
实体模型
,并进行保存。加载
视图
时,由于
MVC
的原因,
控制器
首先加载,因此将
实体模型
映射到
视图模型
,并将其返回到视图

这将保护您的
实体
,因此您不会在数据库中保存垃圾

视图模型中
我只会放置与该
视图相关的内容

我在回答中加入了这一点,只是因为上面的评论太长了


让我知道你的进展如何,删除这两个属性肯定是很困难的。

视图用于呈现HTML,而不是执行计算。另外,在打印Html时,请不要使用
@Html.Raw()
。MVC中视图的一个良好做法是向其提供所有需要的信息,以便视图仅呈现数据。此数据对象通常称为ViewModel。我在没有@Html.Raw()的情况下尝试过它,但格式不正确。离题:不要使用此类结构:
@Html.Raw(“你能给我一个正确语法的示例吗?每次我尝试不使用
@Html.Raw())
我的页面呈现不正确。我需要将
item.Name
中的数据附加到折叠id中。我需要这个id=“collapse5”我一直得到这个id=“collapse5”,但没有“@Html.Raw()”,所以我尝试了这个,但一直得到一个错误。
公共可为null的PTE{get{return Math(this.PTE Value/60);}set{}
Error表示Math是一种类型,但与变量类似。您不需要添加
@Math()
,只需执行计算并返回结果。如果PTE是一个
十进制数?/Nullable
,则需要执行
this.PTE.GetValueOrDefault()/60
@Clint Clark-改为尝试此操作,
public decimal PropertyName{get{返回this.PTE.Value/60;}}
@ShaneVanWyk-我已经将这些属性添加到了我的模型中,非常有效,谢谢。现在的问题是,只要编译器重新构建数据模型,我就会丢失我添加的任何属性。有什么办法吗?仅供参考,我正在处理一个我无法更改的数据方案,而且布局不太好。@ClintMark-我有点不确定习惯这里发生的事情抱歉。需要更多详细信息。您是说编译器删除了您添加的代码。还是这是一个持久性问题?还是UI中的显示问题?请记住,您需要添加
@Html.DisplayFor(modelitem=>item.PropertyName)
.chtml
文件中的
。请澄清这是否是问题所在。我花了上周的时间试图更好地了解实体模型
和视图模型
的自动映射和最佳实践。我认为这是一部分