Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许使用将项目添加到asp.net mvc4模型_Javascript_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

Javascript 允许使用将项目添加到asp.net mvc4模型

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

模型:

我想让用户从客户端添加另一个内容

我发现了一些我不喜欢的解决方案:

手动编写html标记。我不喜欢它,因为也许有一天渲染的结构会改变,我的代码也不会改变。 就像这里:

从服务器获取结构。我不喜欢这个,因为。。嗯,我总是不喜欢使用服务器,除非我不得不这样做。 就像这里:


我正在寻找一个更好、更智能的解决方案。

这个解决方案有点复杂,但我认为它涵盖了我的所有观点

逻辑是:

从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>