Asp.net mvc ASP.NET MVC helper js函数在Razor 4中不起作用

Asp.net mvc ASP.NET MVC helper js函数在Razor 4中不起作用,asp.net-mvc,razor,razor-declarative-helpers,Asp.net Mvc,Razor,Razor Declarative Helpers,我在cshtml文件中有以下razor助手函数,它在asp.net mvc 3上工作,在我将其迁移到mvc 4后,它不再工作(编译) PopulateForm的主要功能是根据服务器模型设置html控件的值 我发现这是因为第行的语法: @(SetField(formId, fieldNamePrefix + p.Name, value)); 所以我把它改成: @Js.SetField(formId, fieldNamePrefix + p.Name, value); 它可以编译,但如果我调试它

我在cshtml文件中有以下razor助手函数,它在asp.net mvc 3上工作,在我将其迁移到mvc 4后,它不再工作(编译)

PopulateForm的主要功能是根据服务器模型设置html控件的值

我发现这是因为第行的语法:

@(SetField(formId, fieldNamePrefix + p.Name, value));
所以我把它改成:

@Js.SetField(formId, fieldNamePrefix + p.Name, value);
它可以编译,但如果我调试它,它就不会执行SetField函数体

@using System.Linq;

@helper Encode(object value) {
    @(value != null ? HttpUtility.JavaScriptStringEncode(value.ToString()) : "")
}


@helper SetField(string formId, string fieldName, object value) {
    var type = (value != null) ? value.GetType() : typeof(object);
    var formattedValue = value;
    if (type == typeof(DateTime)) { formattedValue = ((DateTime)value).ToString("dd-MMM-yyyy"); }
    if (type == typeof(TimeSpan)) { formattedValue = ((TimeSpan)value).ToString("hh\\:mm"); }
    @: $("#@formId *[name='@fieldName']").changeVal("@JS.Encode(formattedValue)");
}


@helper PopulateForm(dynamic model, string formId, string[] excludedFields = null, string fieldNamePrefix = "") {
    var valueProperties = model.GetType().GetProperties();
    foreach (var p in valueProperties)
    {
        if (excludedFields != null && Array.Exists<string>(excludedFields, f => f == p.Name)) { continue; };
        var value = @p.GetValue(model, null);
        @(SetField(formId, fieldNamePrefix + p.Name, value));
    }
}
@使用System.Linq;
@辅助对象编码(对象值){
@(value!=null?HttpUtility.JavaScriptStringEncode(value.ToString()):“”)
}
@辅助设置字段(字符串formId、字符串字段名、对象值){
var type=(value!=null)?value.GetType():typeof(对象);
var formattedValue=值;
if(type==typeof(DateTime)){formattedValue=((DateTime)value).ToString(“dd-MMM-yyyy”);}
if(type==typeof(TimeSpan)){formattedValue=((TimeSpan)value).ToString(“hh\\:mm”);}
@:$(“#@formId*[name=”@fieldName']).changeVal(“@JS.Encode(formattedValue)”);
}
@helper PopulateForm(动态模型,字符串formId,字符串[]excludedFields=null,字符串fieldNamePrefix=”“){
var valueProperties=model.GetType().GetProperties();
foreach(valueProperties中的var p)
{
如果(excludedFields!=null&&Array.Exists(excludedFields,f=>f==p.Name)){continue;};
var value=@p.GetValue(model,null);
@(设置字段(formId,fieldnameprifix+p.名称,值));
}
}

试着这样写:

@using System.Linq;

@helper Encode(object value) {
    @(value != null ? HttpUtility.JavaScriptStringEncode(value.ToString()) : "")
}


@helper SetField(string formId, string fieldName, object value) {
    var type = (value != null) ? value.GetType() : typeof(object);
    var formattedValue = value;
    if (type == typeof(DateTime)) { formattedValue = ((DateTime)value).ToString("dd-MMM-yyyy"); }
    if (type == typeof(TimeSpan)) { formattedValue = ((TimeSpan)value).ToString("hh\\:mm"); }
    @: $("#@formId *[name='@fieldName']").changeVal("@Encode(formattedValue)");
}


@helper PopulateForm(dynamic model, string formId, string[] excludedFields = null, string fieldNamePrefix = "") {
    var valueProperties = model.GetType().GetProperties();
    foreach (var p in valueProperties)
    {
        if (excludedFields != null && Array.Exists<string>(excludedFields, f => f == p.Name)) { continue; };
        var value = p.GetValue(model, null);
        SetField(formId, fieldNamePrefix + p.Name, value);
    }
}
@使用System.Linq;
@辅助对象编码(对象值){
@(value!=null?HttpUtility.JavaScriptStringEncode(value.ToString()):“”)
}
@辅助设置字段(字符串formId、字符串字段名、对象值){
var type=(value!=null)?value.GetType():typeof(对象);
var formattedValue=值;
if(type==typeof(DateTime)){formattedValue=((DateTime)value).ToString(“dd-MMM-yyyy”);}
if(type==typeof(TimeSpan)){formattedValue=((TimeSpan)value).ToString(“hh\\:mm”);}
@:$(“#@formId*[name=”@fieldName']).changeVal(“@Encode(formattedValue)”);
}
@helper PopulateForm(动态模型,字符串formId,字符串[]excludedFields=null,字符串fieldNamePrefix=”“){
var valueProperties=model.GetType().GetProperties();
foreach(valueProperties中的var p)
{
如果(excludedFields!=null&&Array.Exists(excludedFields,f=>f==p.Name)){continue;};
var值=p.GetValue(模型,空);
设置字段(formId,fieldnameprifix+p.名称,值);
}
}