叫我一个语法书呆子,但当结果标签上写着“找到1个结果”时,它会让我非常恼火(没有双关语) - IOW,当它显示复数时出现奇异情况(BTW,为什么是“0”)结果被认为是复数/倍数?)。
所以,我正在尝试添加代码来处理asp.net MVC站点/应用程序中的特殊情况。
以下是相关的(我认为)代码:
HTML /剃刀:
<td id="tdNumberOfResults" colspan="3" style="font-size: 13px; padding-top: 32px; text-align: right; visibility: hidden;">
<span id="spanNumberOfResults" style="display: none; position: relative; right: 5px;">
@Html.DisplayTextFor(m => m.NumberOfResults)
</span>
jQuery的:
var resultsText = jQuery.trim($("#spanNumberOfResults").text());
if (resultsText != "") {
$("#tdNumberOfResults").css("visibility", "visible");
// adding this to singularize "results" to "result" when 1 is the amount doesn't work
// if (resultsText == "1 results") {
// resultsText = "1 result";
// }
. . .
C#/剃刀:
namespace DBPReporter.Models
{
public class DBPSalesReceiptCriteriaModel : ReportModelCore
{
[LocalizedDisplayName("NumberOfResults", NameResourceType = typeof(FieldNames.FieldNames))]
public long? NumberOfResults { get; set; }
. . .
我意识到MVC等的优点,但所有的抽象/间接/误导都有时令人沮丧。有时候,我渴望编程“更接近金属”的日子,可以这么说。当然,我昔日的日子与你昔日的日子不同,geschweige否认了屹耳的日子。
作为对我对精确语法的痴迷的报复,浏览器给了我这种类似于快速打击的报应:
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: Section blocks ("@section Header { ... }") cannot be nested. Only one level of section blocks are allowed.
Source Error:
Line 203:}
Line 204:
Line 205:@section MainHead
Line 206:{
Line 207: @*<link type="text/css" href="@Url.Content("~/Content/jquery-ui-1.8.16.custom.css")" rel="stylesheet" />*@
Source File: /DBPReporter/Views/DBPCriteria/ReceiptCriteria.cshtml Line: 205
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
...当我将代码更改为:
//alert(resultsText); <-- just "1" !?
if (resultsText.trim == "1") {
$("#spanNumberOfResults").text("1 result");
}
好像我抚摸了猫,狗咬了我。
好吧,上面是某种乱七八糟的支撑不匹配或语法错误或其他什么,但是一旦我得到了解决方案,我认为我有解决方案:我在控制器中更改代码,即从简单的斯巴达但令人失望的一个 - 维度线:
model.message = String.Format("{0} results", result.Count);
......对此:
if (result.Count == 1)
{
model.message = String.Format("{0} result", result.Count);
}
else
{
model.message = String.Format("{0} results", result.Count);
}
在编译的路上发生了一件有趣的事:
我试图格式化该文档,并且它抱怨它无法做到,因为这一行:
<span style="background-color: #e55302; color: hsla(360, 100%, 100%, 1); font-family: "Segoe UI", Verdana, sans-serif; display: inline-block; font-weight: bold; padding: 3px; position: relative; right: 0px; width: 300px;" >
然后我删除了“Segoe UI”,再次尝试,并且它符合重新格式化文档。但是......它“缩小”了我的代码!我最终得到了:
$("#FormSalesTotalMin, #FormSalesTotalMax").autoNumeric( { mNum: 5, mDec: 2, aNeg:
'', aSep: ',' }); $("#FormDeptBegin, #FormDeptEnd").autoNumeric( { mNum: 5, mDec:
0, aNeg: '', aSep: '' }); $("#PasteUPCs").click(function(e) { if (jQuery.trim($("#PasteUPCs").val())
== "") $("#PasteUPCs").val(""); }); $("#submit_button").click(function() { $("#tdNumberOfResults").css("visibility",
(等)
多亏了Ctrl + Z,自我撒丁化只是暂时的,但我有时也想知道Visual Studio是否“过度用药”。
亨利克走在正确的轨道上。但这是反馈过去的样子:
......现在看来是这样的:
答案 0 :(得分:1)
只需将您的jquery更改为:
var results = $("#spanNumberOfResults").text();
if(results == "1 results")
$("#spanNumberOfResults").text("1 result");
这是fiddle。
您的resultsText
是一个字符串对象而不是jQuery引用,因此您需要将jQuery元素的Text
值设置为新文本,而不仅仅是更改var。
答案 1 :(得分:1)
一旦NumberOfResults属性为long,代码
@Html.DisplayTextFor(m => m.NumberOfResults)如何生成整个字符串“找到1个结果”并不清楚,所以我假设它只包含数字。
您可以在Razor视图中添加一些逻辑,以使用条件表达式生成正确的复数:
<td id="tdNumberOfResults" colspan="3" style="font-size: 13px; padding-top: 32px; text-align: right;">
<span id="spanNumberOfResults" >
@Html.DisplayTextFor(m => m.NumberOfResults) @(Model.NumberOfResults > 1 ? "results" : "result") found.
</span>
</td>
在这种情况下,您不必使用jquery在客户端处理复数化。