我在哪里可以为MVC显示文本注入一点点奇点?

时间:2013-06-11 17:07:42

标签: jquery html asp.net-mvc razor

叫我一个语法书呆子,但当结果标签上写着“找到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");
}

好像我抚摸了猫,狗咬了我。

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

(等)

多亏了Ctrl + Z,自我撒丁化只是暂时的,但我有时也想知道Visual Studio是否“过度用药”。

更新4

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

enter image description here

......现在看来是这样的:

too squishy, and too secretive

2 个答案:

答案 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在客户端处理复数化。