-
Notifications
You must be signed in to change notification settings - Fork 92
@Html implementation example
Alexander edited this page Jan 10, 2021
·
2 revisions
public class TestModel
{
public string StudentId { get; set; }
}
public class MvcTemplate<T> : RazorEngineTemplateBase<T>
{
public MyHtmlHelper<T> Html { get; set; }
}
public class MyHtmlHelper<T>
{
private readonly MvcTemplate<T> templateInstance;
public MyHtmlHelper(MvcTemplate<T> templateInstance)
{
this.templateInstance = templateInstance;
}
public string Hidden(Expression<Func<T, object>> selector)
{
object propertyValue = selector.Compile()(this.templateInstance.Model);
MemberExpression body = (MemberExpression)selector.Body;
string name = HttpUtility.HtmlAttributeEncode(body.Member.Name);
string value = HttpUtility.HtmlAttributeEncode(propertyValue?.ToString() ?? "");
return $"<input type=\"hidden\" name=\"{name}\" value=\"{value}\" \\>";
}
}
class Program
{
static void Main(string[] args)
{
string content = @"
<p>hidden: @Html.Hidden(m => m.StudentId)</p>
";
RazorEngine razorEngine = new RazorEngine();
var compiledTemplate = razorEngine.Compile<MvcTemplate<TestModel>>(content);
string result = compiledTemplate.Run(template =>
{
template.Model = new TestModel()
{
StudentId = "<script>alert(\"1\");</script>"
};
template.Html = new MyHtmlHelper<TestModel>(template);
});
Console.WriteLine(result);
Console.ReadKey();
}
}