为什么该ViewBag不通过其分配的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么该ViewBag不通过其分配的值?相关的知识,希望对你有一定的参考价值。
为公平起见,我对MVC并不陌生,因此对ViewBags概念不陌生。
目前,我有一个带有按钮的视图。在该按钮内,我分配了一个ID。为了尝试在ViewBag中使用此ID值并将其传递到另一个视图,我使用AJAX在单击按钮时获取ID的值。
我的按钮代码如下:
<button class="btn" onclick="location.href = '@Url.Action("EditCategory", "EditCategory", new { id = dataLine.Split(Model.CategoryList.delimiterChar)[1] })'; passCategoryPlaceHolder(this.id)" id="@dataLine.Split(Model.CategoryList.delimiterChar)[0]">ButtonNameHere</button>
我的AJAX代码:(这通过功能'passCategoryPlaceHolder'来获取被单击的按钮的ID。)
function passCategoryPlaceHolder(clickedCategory)
{
var catPlaceHolder = clickedCategory
$.post("/EditCategory/PassCategoryPlaceHolder", {placeHolder: catPlaceHolder})
}
我现在想将'placeHolder'的值分配给一个ViewBag,然后我要在一个与上面的按钮声明所在的视图不同的视图中使用它。
在我的控制器(EditCategory)中,我的ActionResult(PassCategoryPlaceHolder)看起来像这样:
public ActionResult PassCategoryPlaceHolder(string placeHolder)
{
ViewBag.CategoryHolder = placeHolder;
return View();
}
我希望通过这样做,我能够将在原始视图中单击的按钮的ID值分配给'ViewBag.CategoryHolder'。
最后,我想按如下方式在另一个视图中使用此ViewBags值;
<script>
document.getElementById("changedCategory").value = @ViewBag.CategoryHolder;
</script>
尽管就目前情况而言,这绝对没有任何作用,我不确定为什么会这样吗?如果有人可以告诉我我哪里出了问题,我将不胜感激。谢谢!
我的看法:
@{
ViewBag.Title = "Edit Item";
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
}
@model u18043039_HW3.Models.Category
<div class="category-layout">
<h2 class="addCategory">Edit Item</h2>
<br />
</div>
<!-- Modal Code Follows -->
<div class="modal fade" id="confirm-submit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
Confirm Submit
</div>
<div class="modal-body">
Are you sure you want to make the following changes to (Add Item Name Here)?
<table class="table">
<tr>
<th id="categoryDescriptionMain"></th>
<td id="modalDescription"></td>
</tr>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">No</button>
<button type="submit" id="btnSubmit" class="btn btn-success success">Yes</button>
</div>
</div>
</div>
</div>
<!-- Modal Code Ends -->
@using (html.BeginForm("EditCategory", "EditCategory", FormMethod.Post, new { id = "formFieldEditCategory" }))
{
<div class="col-md-4 mb-3">
<label for="categoryDescription" style="font-size:25px" id="CategoryDescriptionLabel">Description</label>
<input id="changedCategory" class="form-control" type="text" name="changedCategory" required>
<script>
document.getElementById("changedCategory").value = '@ViewBag.PassHolder';
System.Diagnostics.Debug.WriteLine(@ViewBag.PassHolder);
</script>
<div class="valid-feedback">
Looks good!
</div>
<br />
<input type="button" value="submit" id="submitBtn" data-toggle="modal" data-target="#confirm-submit" />
<button type="button" class="btn-primary" onclick="location.href='@Url.Action("Index","Index")'">Return</button>
</div>
}
<!-- Script Jquery Code Begins -->
<script>
document.getElementById("submitBtn").addEventListener("click", function () {
document.getElementById("categoryDescriptionMain").innerHTML = '"' + document.getElementById("CategoryDescription").value + '"';
});
$("#btnSubmit").click(function () {
if ($("#formFieldEditCategory")[0].checkValidity())
$("#formFieldEditCategory").submit()
else
//Validate Form
$("#formFieldEditCategory")[0].reportValidity()
});
</script>
为了能够访问脚本中的ViewBag
,您需要在ViewBag
,''
周围使用单引号:
document.getElementById("changedCategory").value = '@ViewBag.CategoryHolder';
以上是关于为什么该ViewBag不通过其分配的值?的主要内容,如果未能解决你的问题,请参考以下文章
NET MVC中ViewData,ViewBag和TempData的区别浅析
如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript
asp.net mvc 显示 ViewBag 字典到 javascript