/ / रेज़र में lambdas के रूप में एचटीएमएल अभिव्यक्ति - क्या अनुमति है, यह कहां दस्तावेज है - asp.net, asp.net-mvc, razor, asp.net-mvc-5, asp.net-core-mvc

रेज़र में लैम्बडास के रूप में एचटीएमएल एक्सप्रेशन - क्या अनुमति है, यह कहां दस्तावेज है - asp.net, asp.net-mvc, razor, asp.net-mvc-5, asp.net-core-mvc

मैं बस रेजर में सबसे भयानक सुविधा में आया था, मैं पूरी तरह से चूक गया।

आप परिभाषित कर सकते हैं

public delegate IHtmlString RazorBlock(Object unknown);

और कुछ समारोह

public static IHtmlString Foo(RazorBlock block) => block(null);

और फिर उसे रेजर के टुकड़े से बुलाओ:

@(
Helper.Foo(@<div>some text</div>)
)

आंतरिक एचटीएमएल वास्तव में विधि क्या है Foo प्राप्त करता है।

मैंने हमेशा सोचा था कि लैम्बडा में घोंसला रेजर का समर्थन नहीं है। लकिन यह है। रेजर मैंने सोचा से कहीं ज्यादा दूर चला गया।

मेरा एकमात्र प्रश्न:

DevExtreme के एएसपी.नेट एमवीसी रैपर से नमूने को देखते हुए मुझे यह सुविधा मिली, और इसकी परिभाषा RazorBlock वहां से आता है

मुझे नहीं पता क्यों unknown पैरामीटर आवश्यक है (हालांकि यह है) और इसे रेजर स्निपेट से कैसे पहुंचा जा सकता है।

उत्तर:

उत्तर № 1 के लिए 1

मुझे नहीं पता कि अज्ञात पैरामीटर क्यों आवश्यक है (हालांकि यह है) और इसे रेजर स्निपेट से कैसे पहुंचा जा सकता है।

संकलित रेजर कोड को देखकर यह समझना आसान है (जिसे% windir% माइक्रोसॉफ्ट .NETFrameworkv4.0.30319 समकालीन एएसपी.नेट फाइलों के तहत पाया जा सकता है)।

उदाहरण के लिए, निम्नलिखित मार्कअप:

@functions{
public delegate IHtmlString RazorBlock(Object unknown);

static object Helper(RazorBlock block) {
return null;
}
}

@Helper(@<text>
multi-line
text
</text>)

इस वर्ग का उत्पादन करता है:

public class _Page_Views_Home_Index_cshtml : System.Web.Mvc.WebViewPage<dynamic> {
public delegate IHtmlString RazorBlock(Object unknown);

static object Helper(RazorBlock block) {
return null;
}

// . . .

public override void Execute() {
// . . .

Write(Helper(item => new System.Web.WebPages.HelperResult(__razor_template_writer => {
BeginContext(__razor_template_writer, "~/Views/Home/Index.cshtml", 174, 28, true);
WriteLiteralTo(__razor_template_writer, "rn    multi-linern    textrn");
EndContext(__razor_template_writer, "~/Views/Home/Index.cshtml", 174, 28, true);
})));

// . . .
}
}

संपादित करें। आप वह देख सकते हैं @<text></text> ब्लॉक में बदल रहे हैं item => HelperResult lambdas। तथा object => IHtmlString उस कोड के साथ संगत सबसे आम प्रतिनिधि हस्ताक्षर है।