我有一个部分观点,我在页面上调用如下: -
@Html.Partial("~/Views/Shared/ImageGallery.cshtml", Model)
此页面的实际Jquery的代码如下: -
<script type="text/javascript">
$(document).ready(function () {
$('.modal_block').click(function (e) {
$('#tn_select').empty();
$('.modal_part').hide();
});
$('#modal_link').click(function (e) {
$('.modal_part').show();
var context = $('#tn_select').load('/Upload/UploadImage?Page=Article&Action=Edit&id=16', function () {
initSelect(context);
});
e.preventDefault();
return false;
});
});
</script>
现在这完美无缺,但是我需要找到一种方法来传递动态变量而不是硬编码变量: -
Upload/UploadImage?Page=Article&Action=Edit&id=16
在模型中我有所有变量,但是我不知道如何将它们插入到Jquery中。非常感谢任何帮助!
--------- UPDATE -----------------------
这是我在每个需要ImageGallery的cshtml中添加的代码。
</div>
@Html.HiddenFor(model => model.PageViewModel.Page.PageTitle, new { id = "PageTitle"});
@Html.HiddenFor(model => model.PageViewModel.Page.PageAction, new { id = "PageAction"});
@Html.HiddenFor(model => model.ArticleViewModel.Article.ArticleID, new { id = "ArticleID"});
<div>
@Html.Partial("~/Views/Shared/ImageGallery.cshtml", Model)
</div>
ImageGallery中的新Javascript: -
<script type="text/javascript">
var pageTitle = $('#PageTitle').val();
var pageAction = $('#PageAction').val();
var id = $('#ArticleID').val();
$(document).ready(function () {
$('.modal_block').click(function (e) {
$('#tn_select').empty();
$('.modal_part').hide();
});
$('#modal_link').click(function (e) {
$('.modal_part').show();
var context = $('#tn_select').load('/Upload/UploadImage?Page=' + pageTitle + '&Action=' + pageAction + '&id=' + id, function () {
initSelect(context);
});
e.preventDefault();
return false;
});
});
</script>
现在工作正常
答案 0 :(得分:18)
您可以在视图中添加隐藏字段,并将数据绑定到模型中。然后你可以从jQuery轻松读取这个值。
查看:
@Html.HiddenFor(model => model.Id, new { id = "FieldId"});
脚本:
var id= $('#FieldId').val();
此外,您可以将此隐藏在您的局部视图中。如果您的局部视图不是强类型,请将HiddenFor更改为Hidden。您的ImageGallery局部视图应包含以下div:
</div>
@Html.Hidden("PageTitle", Model.PageViewModel.Page.PageTitle);
@Html.Hidden("PageAction", Model.PageViewModel.Page.PageAction);
@Html.Hidden("ArticleID", Model.ArticleViewModel.Article.ArticleID);
<div>
在这种情况下,您不需要将hiddens放到需要ImageGallery的每个cshtml中。
答案 1 :(得分:2)
您可以设置隐藏字段,也可以只声明javascript变量并从模型或Viewbag中设置它们的值,如:
var action = @Model.action;
或
var id = @ViewBag.id;
您可以在代码中使用它
<script type="text/javascript">
var action = @Model.action;
var id = @ViewBag.id;
$(document).ready(function () {
$('.modal_block').click(function (e) {
$('#tn_select').empty();
$('.modal_part').hide();
});
$('#modal_link').click(function (e) {
$('.modal_part').show();
var urlToLoad = "/Upload/UploadImage?Page=Article&Action=" + action + "&id=" + id;
var context = $('#tn_select').load(urlToLoad, function () {
initSelect(context);
});
e.preventDefault();
return false;
});
});
答案 2 :(得分:0)
以下是另一种解决方案。我需要将在web.config中声明的api url传递给JavaScript(在本例中为Jquery)