为什么该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的区别浅析

MVC - 通过 ViewBag 传递列表以查看

如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript

asp.net mvc 显示 ViewBag 字典到 javascript

如何根据 ViewBag 的值调用 javascript 方法

怎么在js中,访问viewbag,viewdata等等的值