1

称我为语法书呆子,但当结果标签显示“找到 1 个结果”时,它会激怒我(不是双关语)- IOW,当它显示单数情况的复数时(顺便说一句,为什么“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 denn Eeyore 的日子。

更新

作为对我对精确语法的痴迷的报应,浏览器给了我一个类似于快速耳光的惩罚:

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");
}

就好像我抚摸猫,狗咬我一样。

更新 2

好吧,上面是某种混乱的大括号不匹配或语法错误或其他东西,但是一旦我解决了这个问题,我想我就有了解决方案:我更改了控制器中的代码,即从令人愉快的斯巴达式但令人失望的一维线:

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);
}

更新 3

在编译的路上发生了一件有趣的事情:

我试图格式化文档,它抱怨它不能这样做,因为这行:

<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",

(ETC。)

多亏了 Ctrl+Z,这种自我沙丁鱼化只是暂时的,但我有时仍然想知道 Visual Studio 是否“过度用药”。

更新 4

恩里克走在正确的轨道上。但这是反馈过去的样子:

在此处输入图像描述

......这就是它现在的样子:

太软弱,太隐秘

4

2 回答 2

1

只需将您的 jquery 更改为:

var results = $("#spanNumberOfResults").text();
if(results == "1 results")
    $("#spanNumberOfResults").text("1 result");

这是一个小提琴

resultsText是一个字符串对象而不是 jQuery 引用,所以你需要将TextjQuery 元素的值设置为新文本,而不仅仅是更改 var。

于 2013-06-11T17:16:23.527 回答
1

不清楚代码如何

@Html.DisplayTextFor(m => m.NumberOfResults)
一旦 NumberOfResults 属性很长,就会生成整个字符串“1 results found”,所以我假设它只包含数字。

您可以在 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 在客户端处理复数。

于 2013-06-11T17:43:16.507 回答