我正在编写各种ASP.NET Server控件,我需要删除默认情况下包装我的控件的标记。我知道您可以将代码更改为其他代码(如此问题,How Do I Change the render behavior of my custom control from being a span),但您如何预防呢?
我从WebControl继承(也可以从CompositeControl继承)。
我通常得到:
<span>Control output</span>
我需要:
Control output
我重写了RenderContents(HtmlTextWriter输出)和CreateChildControls()方法(跨越各种控件)。我迫切需要使用RenderContents(HtmlTextWriter输出)方法来解决这个问题。
答案 0 :(得分:39)
这个怎么样?
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.Write("");
}
public override void RenderEndTag(HtmlTextWriter writer)
{
writer.Write("");
}
答案 1 :(得分:3)
更优雅的方法是使用WebControl的控件(默认情况下使用HtmlTextWriterTag.Span调用)
public MyWebControl() : base(HtmlTextWriterTag.Div){}
并覆盖RenderBeginTag方法以添加自定义属性或其他内容:
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute("class", "SomeClassName");
base.RenderBeginTag(writer);
}
答案 2 :(得分:2)
我遇到了同样的问题。就我而言,我压倒了这些方法:
protected override void OnPreRender(EventArgs e)
{ /* Insert the control's stylesheet on the page */ }
和
protected override void RenderContents(HtmlTextWriter output)
{ /* Control rendering here, <span> tag will show up */ }
为防止出现这种情况,我只需将RenderContents
覆盖替换为以下内容:
protected override void Render(HtmlTextWriter output)
{ /* Control rendering, no <span> tag */ }
希望这有帮助。
答案 3 :(得分:1)
我认为接受的答案是完全必要的。我可能错了,但渲染方法调用所有三个:
所以你应该能够覆盖渲染并手动调用RenderContents:
typedef std::basic_string<TCHAR> tstring;
struct Data
{
std::vector<tstring> name;
unsigned int vehicle;
unsigned int dim;
int maxQ;
};
int main()
{
Data Dataset;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
DWORD dwErr;
#ifdef UNICODE
std::wostream &std_out = std::wcout;
std::wostream &std_err = std::wcerr;
#else
std::ostream &std_out = std::cout;
std::ostream &std_err = std::cerr;
// Find the first file in the directory.
hFind = FindFirstFile(TEXT("C:\\Users\\bla\\Desktop\\c++\\data\\*.txt"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
dwErr = GetLastError();
if (dwErr != ERROR_FILE_NOT_FOUND)
std_err << TEXT("ERROR: ") << dwErr << std::endl;
}
else
{
do
{
if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
Dataset.name.push_back(FindFileData.cFileName);
//std_out << FindFileData.cFileName << std::endl;
}
}
while (FindNextFile(hFind, &FindFileData));
dwErr = GetLastError();
if (dwErr != ERROR_NO_MORE_FILES)
std_err << TEXT("ERROR: ") << dwErr << std::endl;
FindClose(hFind);
}
for(int i = 0; i < Dataset.name.size(); i++)
{
std_out << Dataset.name[i] << std::endl;
}
return 0;
}
任何?也许我错过了什么。我知道这个帖子已经老了,但我最近碰到了这个,上面是我的解决方案。