【发布时间】:2016-08-18 16:38:45
【问题描述】:
正如标题所示,我有一大块HTML,我把它放在我的PartialView 之一中:
<div id="meaningPart">
@Html.Partial("_Meaning", new MeaningModel() {number = 1})
</div>
我的_Meaning 部分View 看起来像这样:
<div class="chunk">
<!--a lot of html here-->
</div>
然后,我创建了一个 jQuery 来响应 <input type="number"/> 事件(向上和向下),如下所示:
<input id="numberMeaning" type="number" class = "col-md-2 form-control form-control-plus number-input" min = "0" max = "99" value = "1"/>
$(document).ready(function () {
var iCnt = 0;
$("#numberMeaning").on('change', function () {
var num = parseInt($("#numberMeaning").val());
if (num > iCnt) { //up
iCnt++;
$("#meaningPart").append("<p>ok dude, this is really a new item!</p>");
} else { //down
iCnt--;
}
});
});
现在,上面的代码可以正常工作,因为我只是将"<p>ok dude, this is really a new item!</p>" 放在jQuery append 中,但是如果我更改这部分:
$("#meaningPart").append("<p>ok dude, this is really a new item!</p>");
进入
$("#meaningPart").append("@Html.Partial("_Meaning", new MeaningModel() {number = 2})"); //by right, the number should follow iCnt here.
然后,虽然 razor 引擎显示语法正确,但新的 Partial HTML 只是不呈现。
我们如何使用jQuery 创建一个新的部分HTML?那可能吗?
(我对 template 属性或 jQuery.clone 不太熟悉 - 但如果有人可以展示如何使用它们来添加到 html 元素,我也对此持开放态度) em>
【问题讨论】:
-
the number should follow iCnt在您当前的实现中根本不可能,因为@Html 在服务器端呈现并且不知道客户端发生了什么。您需要使用ajax来获得@987654342 @ 基于iCnt -
@JAG 嗨,感谢您的回复。我也不熟悉 AJAX。介意通过答案举个例子吗?我会很感激的。
-
您在大脑中混合了服务器端和客户端执行。
-
正确的方法(使用 ajax 使用控制器返回的部分视图更新 DOM,或克隆模板)取决于
{number = #}正在做什么。如果它只是为属性number设置表单控件的值,那么克隆就可以了,但如果它也设置其他属性,那么您将需要ajax。你需要提供更多关于你部分生成的信息。
标签: javascript c# jquery html asp.net-mvc