C# 在ASP.NET MVC中调用方法
我是MVC的新手,在视图输入字段中显示某个方法的结果时遇到问题。我不太确定应该在cshtml中还是在单独的cs文件中创建该方法 我已经使用@function标记在下面的cshtml文件中创建了我的方法C# 在ASP.NET MVC中调用方法,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我是MVC的新手,在视图输入字段中显示某个方法的结果时遇到问题。我不太确定应该在cshtml中还是在单独的cs文件中创建该方法 我已经使用@function标记在下面的cshtml文件中创建了我的方法 @functions{ public int DaysCalc(DateTime first, DateTime second) { QuoteApp.Models.Quote ts = new QuoteApp.Models.Quote(); t
@functions{
public int DaysCalc(DateTime first, DateTime second)
{
QuoteApp.Models.Quote ts = new QuoteApp.Models.Quote();
ts.StartDate = first;
ts.EndDate = second;
int days;
days = (second.Day - first.Day);
return days;
}
}
我在cshtml文件中这样称呼它
@Html.EditorFor(model =>model.DaysCalc(model.StartDate, model.EndDate), new { htmlAttributes = new { @class = "form-control", disabled = "disabled"} })
我收到一个错误声明
模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源
异常详细信息:System.InvalidOperationException:模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式
源错误:
Line 63: @Html.LabelFor(model => model.noOfDays, htmlAttributes: new { @class = "control-label col-md-2" })
Line 64: <div class="col-md-10">
Line 65: @Html.EditorFor(model =>@DaysCalc(model.StartDate, model.EndDate),new { htmlAttributes = new { @class = "form-control", disabled = "disabled"} })
Line 66: @Html.ValidationMessageFor(model => model.noOfDays, "", new { @class = "text-danger" })
Line 67: </div>
Source File: Line: 65
第63行:@Html.LabelFor(model=>model.noOfDays,htmlAttributes:new{@class=“control label col-md-2”})
第64行:
第65行:@Html.EditorFor(model=>@DaysCalc(model.StartDate,model.EndDate),new{htmlAttributes=new{@class=“form control”,disabled=“disabled”})
第66行:@Html.ValidationMessageFor(model=>model.noOfDays,”,新的{@class=“text danger”})
第67行:
源文件:第65行
您只能对模型上具有实际属性(即非函数)的方法使用。我不确定你这样做到底想达到什么目的,所以除非你更新你的问题,否则我真的无法进一步帮助你,但这至少解释了你的错误
编辑
首先,我需要指出,你的日期计算是不正确的。如果StartDate
是2014-06-30,而EndDate
是2014-07-01,该怎么办。然后的结果是1-30=-29
。我有理由相信那不是你想要的。DateTime
上有一个方法就是为了这个目的:
TimeSpan difference = EndDate.Subtract(StartDate);
结果是一个TimeSpan
,然后您可以调用difference.Days
来获取所涉及的天数。另外,还有一个TotalDays
属性offTimeSpan
将返回小数天(而days
仅返回整天)
接下来,不管它值多少钱,因为你对这一切都是新手,in-view剃须刀助手是一个很好的新奇玩意儿,但它们不切实际到了无用的地步,坦率地说,它们违反了MVC(模式,而不是微软的框架)。如果需要进行这种类型的计算,最好在模型上进行。您可以实现如下属性:
public int Days
{
get
{
return EndDate.Subtract(StartDate).Days;
}
}
但是,这是只读的(没有setter方法),如果您正在谈论将其用作输入值,那么使用只读属性支持它是没有意义的(除非,我猜,如果您将其设置为只读输入,在这种情况下,它可能只是纯文本)。所以,如果这是你打算发回的东西,你需要弄清楚这对二传来说意味着什么。老实说,我看不出你会用它做什么,因为唯一合乎逻辑的事情是让它为StartDate
和EndDate
设置值,没有参考点你就做不到。您可以要求设置StartDate
,然后获取Days
的值,然后使用该值计算EndDate
,但这一切都归结为您的业务需求。您只能将用于模型上具有实际属性(即不是函数)的方法。我不确定你这样做到底想达到什么目的,所以除非你更新你的问题,否则我真的无法进一步帮助你,但这至少解释了你的错误
编辑
首先,我需要指出,你的日期计算是不正确的。如果StartDate
是2014-06-30,而EndDate
是2014-07-01,该怎么办。然后的结果是1-30=-29
。我有理由相信那不是你想要的。DateTime
上有一个方法就是为了这个目的:
TimeSpan difference = EndDate.Subtract(StartDate);
结果是一个TimeSpan
,然后您可以调用difference.Days
来获取所涉及的天数。另外,还有一个TotalDays
属性offTimeSpan
将返回小数天(而days
仅返回整天)
接下来,不管它值多少钱,因为你对这一切都是新手,in-view剃须刀助手是一个很好的新奇玩意儿,但它们不切实际到了无用的地步,坦率地说,它们违反了MVC(模式,而不是微软的框架)。如果需要进行这种类型的计算,最好在模型上进行。您可以实现如下属性:
public int Days
{
get
{
return EndDate.Subtract(StartDate).Days;
}
}
但是,这是只读的(没有setter方法),如果您正在谈论将其用作输入值,那么使用只读属性支持它是没有意义的(除非,我猜,如果您将其设置为只读输入,在这种情况下,它可能只是纯文本)。所以,如果这是你打算发回的东西,你需要弄清楚这对二传来说意味着什么。老实说,我看不出你会用它做什么,因为唯一合乎逻辑的事情是让它为StartDate
和EndDate
设置值,没有参考点你就做不到。您可以要求设置StartDate
,然后获取Days
的值,然后使用该值计算EndDate
,但这一切都可以归结为您的业务需求。将Days属性添加到视图模型中,并在其上存储DaysCalc的结果
然后你可以像这样使用它:
@Html.EditorFor(model =>model.Days, new { htmlAttributes = new { @class = "form-control", disabled = "disabled"} })
将Days属性添加到vie中
@Html.EditorFor(model => model.Days, new { htmlAttributes = new { @class = "form-control", disabled = "disabled"} })
public int Days
{
get {
return EndDate.Day - StartDate.Day;
}
}