我有一个典型的C#自动属性。当我得到一个get时,如何应用WebUtility.HtmlDecode();设置;
更新:
好的,当天的愚蠢错误。我有一个奇怪的问题,我的web.config数据库连接字符串指向正确的服务器,但出于某种原因,因为我有2个实例(一个sql 2008和2012),它仍然在2008年拿起该数据库的实例编码还在那里。我通过我在2012 DB中创建的单元测试解码了Title来解决了编码问题,在这种情况下,这个整个fing帖子在堆栈中是不必要的,因为最终的问题是它是从旧DB中读取的(搞砸了我)
无论如何我已经解决了这个问题,终于摆脱了2008年的副本,现在它在修复之后正好读了:
[Test]
public void CleanAllPostEntries_DecodeHTML_DecodeWasSuccessful()
{
// Arrange
// Act
IEnumerable<Entry> posts = PostCRUD.GetAllPosts();
foreach (Entry post in posts)
{
post.Title = WebUtility.HtmlDecode(post.Title);
post.Body = WebUtility.HtmlDecode(post.Body);
post.MetaTitle = WebUtility.HtmlDecode(post.MetaTitle);
PostCRUD.UpdatePost(post);
//System.Diagnostics.Debug.WriteLine("id: " + post.Id);
//System.Diagnostics.Debug.WriteLine("title: " + WebUtility.HtmlDecode(post.Title));
//System.Diagnostics.Debug.WriteLine("body: " + WebUtility.HtmlDecode(post.Body));
}
//Assert
// TODO: add asserts
}
所以我认为我不需要解码后我已经做过了!
答案 0 :(得分:3)
你不能,我想。唯一的方法是使用一个单独的方法来格式化值并将其分配给属性,ex
private string SamplePropery {get; set;}
private string FormatMethod(string value) {}
private void SampleExecute()
{
// format and set to property
SampleProperty = FormatMethod("hello world");
// get property and format the value
string _value = FormatMethod(SampleProperty);
}
答案 1 :(得分:1)
设置后,属性的值不应更改。它应该返回您设置的相同值。这就是为什么它被称为财产。在设置属性值之前调用HtmlDecode
。
如果其他人使用您的课程而无法访问您的来源,他们无法想象您在设置属性值时正在进行任何处理。
答案 2 :(得分:0)
你真的不想通过属性进行HTML编码/解码,尽管如果你愿意的话也可以。这有几个问题:
您真正想要做的是使用代表HTML编码字符串的更强类型。
.NET 4.0框架包含System.Web.HtmlString
类型,您应该将其用于此目的。实际上,如果您希望保持一般性,请使用System.Web.IHtmlString
界面。
答案 3 :(得分:-1)
你无法使用魔法吸气剂和二传手自动完成。您需要创建自己的私有属性并将其用作公共属性的后备存储。
示例:
private string _Item;
public string Item
{
get
{
return _Item;
}
set
{
_Item = WebUtility.HtmlDecode(value);
}
}
然而,这个问题的其他答案是正确的,这可能是一个坏主意。例如,如果您的代码曾在HTML应用程序之外使用,则必须在设置此属性之前对所有文本进行HTML编码。