Javascript 允许使用将项目添加到asp.net mvc4模型
模型: 我想让用户从客户端添加另一个内容 我发现了一些我不喜欢的解决方案: 手动编写html标记。我不喜欢它,因为也许有一天渲染的结构会改变,我的代码也不会改变。 就像这里: 从服务器获取结构。我不喜欢这个,因为。。嗯,我总是不喜欢使用服务器,除非我不得不这样做。 就像这里:Javascript 允许使用将项目添加到asp.net mvc4模型,javascript,asp.net,asp.net-mvc,asp.net-mvc-4,razor,Javascript,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,模型: 我想让用户从客户端添加另一个内容 我发现了一些我不喜欢的解决方案: 手动编写html标记。我不喜欢它,因为也许有一天渲染的结构会改变,我的代码也不会改变。 就像这里: 从服务器获取结构。我不喜欢这个,因为。。嗯,我总是不喜欢使用服务器,除非我不得不这样做。 就像这里: 我正在寻找一个更好、更智能的解决方案。这个解决方案有点复杂,但我认为它涵盖了我的所有观点 逻辑是: 从razor引擎获取html @Html.TextAreaFor(m => Model.Agrees[i].Text
我正在寻找一个更好、更智能的解决方案。这个解决方案有点复杂,但我认为它涵盖了我的所有观点 逻辑是: 从razor引擎获取html
@Html.TextAreaFor(m => Model.Agrees[i].Text).ToHtmlString()
而不是用属性名称和id替换索引号,这比依赖所有属性值更有意义
public static string CreateHelperTemplate(string PlaceholderPerfix, MvcHtmlString mvcHtmlString)
{
string Result = "";
XElement TempNode = XDocument.Parse(mvcHtmlString.ToHtmlString()).Root;
XAttribute AttrId = TempNode.Attribute("id");
AttrId.Value = AttrId.Value.Replace("0", PlaceholderPerfix);
XAttribute AttrName = TempNode.Attribute("name");
AttrName.Value = AttrName.Value.Replace("0", PlaceholderPerfix);
// Clear the content if exist
TempNode.SetValue(string.Empty);
Result = TempNode.ToString();
return Result;
}
结果是这样的:
<textarea class="form-control" cols="20" id="Perfix_$__Text" name="Agrees[$].Text" rows="2"></textarea>
然后,在javascript中,当用户单击Add item按钮时,您可以获得模板和索引,并用索引替换“$”。
因此,我不需要调用服务器,如果助手的结构发生变化,我的代码仍然可以工作
它起作用了。我不同意你不看那些文章的理由。为什么不呢?你能解释一下吗?你将在HTML ie上做的小DOM操作。添加一个新的表行,我看不到在可预见的将来会在哪里改变你的代码,HTML是相当标准的。关于第二点,按照第1条中的描述,到服务器添加一个新项目并没有什么错。问题不在于操纵。我希望渲染真实项目的引擎将渲染模板。如果出于某种原因更新框架或其他东西,属性结构将发生变化,那么这将是有问题的。2.当我必须去服务器时,我就去做。但是为了得到我能在第一时间渲染的东西,这似乎是一种浪费。
public static string CreateHelperTemplate(string PlaceholderPerfix, MvcHtmlString mvcHtmlString)
{
string Result = "";
XElement TempNode = XDocument.Parse(mvcHtmlString.ToHtmlString()).Root;
XAttribute AttrId = TempNode.Attribute("id");
AttrId.Value = AttrId.Value.Replace("0", PlaceholderPerfix);
XAttribute AttrName = TempNode.Attribute("name");
AttrName.Value = AttrName.Value.Replace("0", PlaceholderPerfix);
// Clear the content if exist
TempNode.SetValue(string.Empty);
Result = TempNode.ToString();
return Result;
}
<textarea class="form-control" cols="20" id="Perfix_$__Text" name="Agrees[$].Text" rows="2"></textarea>