您正在使用过期的浏览器。它可能无法正确显示此网站或其他网站。
您应该升级或使用 替代浏览器.

 在视图中有两个model.PlaceHolderNumber

已加入
2020年11月13日
留言内容
6
编程经验
1-3
我在一个视图中有两个部分,并且两个部分都使用相同的模型值,但是最初都将其设置为显示:无,并且由jquery根据下拉列表的值进行更改。

因此,在任何时候都可以看到另一个显示设置为无,但我提交的第一个显示仍然对第二个显示有影响。因此,我的意思是我在控制器中输入了一个数字,然后在控制器中,该数字为空,因为第一个数字中没有值,因此将其考虑在内。

C#:
<div  ID ="choiceNumber" style="display: none;">
                            @Html.Partial("_FormElementPartial", new ViewDataDictionary() {
                                { "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewPlaceholderNumber")},
                                { "Element", Html.NumberFieldFor(model => model.PlaceHolderNumber, 999999, BL.MaximumNumberOfDecimalPlaces, formTextField: true, minValue: -999999) },
                                { "Info", Html.LocalisedTooltip((Model.Id > 0 ? "ttEditModuleQuestionForm_NewPlaceholderNumber" : "ttNewModuleQuestionForm_NewPlaceholderNumber"), "lblModuleQuestionForm_NewPlaceholderText_ToolTip", SystemComponent.TheSystem) }
                            })
                        </div>

                        <div  ID ="choiceDate" style="display: none;">
                            @Html.Partial("_FormElementPartial", new ViewDataDictionary() {
                                { "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewPlaceholderDate")},
                                { "Element", Html.NumberFieldFor(model => model.PlaceHolderNumber, 999999, 0, formTextField:true, minValue: -999999, htmlAttributes: new { @id = "PlaceHolderDate"}) },
                                { "Info", Html.LocalisedTooltip((Model.Id > 0 ? "ttEditModuleQuestionForm_NewPlaceholderDate" : "ttNewModuleQuestionForm_NewPlaceholderDate"), "lblModuleQuestionForm_NewPlaceholderDate_ToolTip", SystemComponent.TheSystem) }
                            })
                        </div>
 
由主持人最后编辑:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
移至Asp.Net
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
您忽略了问一个问题?
 
已加入
2020年11月13日
留言内容
6
编程经验
1-3
抱歉,所以我的问题是,即使一次只能隐藏一个,我是否可以在同一页面上使用两个相同的模型值,因为无论如何我似乎只能拥有1个,所以不管是否隐藏了一个。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
Can the elements on the final page that are generated by the two partial views be distinguished? If both views generate elements with the same ID then they will be treated as the same element in many scenarios.
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
您可以在视图中使用@ Html.RenderPartial()(按您的样子)来渲染具有相同模型的另一个局部视图,而不会出现任何问题。您的jquery是我需要查看的东西。你能告诉我你的jQuery代码吗?

如果您向我展示您的jquery,我可以帮助您调整代码。

重新阅读您的打开主题后,您的下拉菜单会导致页面刷新吗?还是由于您对jquery代码的依赖而阻止刷新?

一旦看到您的jquery脚本以及html下拉列表,我应该能够为您提供完整的答案。
 
已加入
2020年11月13日
留言内容
6
编程经验
1-3
嗨,是的,jquery非常简单,并且没有设置下拉菜单并且该下拉菜单没有变化,该值确定其中之一显示。一共有三个,我将其放在下面。

C#:
function TogglePlaceholderFieldVisibility(modalId) {
    var modal = $("#" + modalId);
    var inputValue = modal.find(".questionTypeDropdown").val();
    modal.find("#pnlPlaceholderFields").show();
    modal.find("#choice" + inputValue).show();
}

@Html.Partial("_FormElementPartial", new ViewDataDictionary() {
{ "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewQuestionType") },
{ "Element", Html.ExtendedDropDownFieldFor(model => model.QuestionType, Model.QuestionTypes, includeBlank: Model.Id <= 0,  cssClass: "questionTypeDropdown textBoxSizeFullWidth textSizeStandard text-input formElement", disabled : Model.Id > 0 )},
{ "Info", "" }
})

<div  ID ="pnlPlaceholderFields" >
<!-- #region Placeholder Label for Text -->
<div  ID ="choiceText" style="display: none;">
@Html.Partial("_FormElementPartial", new ViewDataDictionary() {
{ "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewPlaceholderText")},
{ "Element", Html.TextFieldFor(model => model.PlaceHolderValue, "Questionnaire_Question_Text", "Placeholder_Value_Text", TextBoxType.Standard, htmlAttributes: new { @id = (Model.Id > 0 ? "txtEditQuestionPlaceHolderValue" : "txtNewQuestionPlaceHolderValue")}, formTextField: true) },
{ "Info", Html.LocalisedTooltip((Model.Id > 0 ? "ttNewModuleQuestionForm_NewPlaceholderText" : "ttNewModuleQuestionForm_NewPlaceholderText"), "lblModuleQuestionForm_NewPlaceholderText_ToolTip", SystemComponent.TheSystem) }
})
</div>
<!-- #endregion -->

<!-- #region Placeholder Label for Number -->
<div  ID ="choiceNumber" style="display: none;">
@Html.Partial("_FormElementPartial", new ViewDataDictionary() {
{ "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewPlaceholderNumber")},
{ "Element", Html.NumberFieldFor(model => model.PlaceHolderNumber, 999999, BL.MaximumNumberOfDecimalPlaces, formTextField: true, minValue: -999999) },
{ "Info", Html.LocalisedTooltip((Model.Id > 0 ? "ttEditModuleQuestionForm_NewPlaceholderNumber" : "ttNewModuleQuestionForm_NewPlaceholderNumber"), "lblModuleQuestionForm_NewPlaceholderText_ToolTip", SystemComponent.TheSystem) }
})
</div>
<!-- #endregion -->

<!-- #region Placeholder Label for Date -->
<div  ID ="choiceDate" style="display: none;">
@Html.Partial("_FormElementPartial", new ViewDataDictionary() {
{ "Label", LH.GetText(SystemComponent.TheSystem, "lblModuleQuestionForm_NewPlaceholderDate")},
{ "Element", Html.NumberFieldFor(model => model.PlaceHolderNumber, 999999, 0, formTextField:true, minValue: -999999, htmlAttributes: new { @id = "PlaceHolderDate"}) },
{ "Info", Html.LocalisedTooltip((Model.Id > 0 ? "ttEditModuleQuestionForm_NewPlaceholderDate" : "ttNewModuleQuestionForm_NewPlaceholderDate"), "lblModuleQuestionForm_NewPlaceholderDate_ToolTip", SystemComponent.TheSystem) }
})
</div>
<!-- #endregion -->
</div>
 
由主持人最后编辑:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
首先,您的函数应该在脚本标签中,如下所示:
JavaScript:
                            <script>
                                function TogglePlaceholderFieldVisibility(modalId) {
                                    var modal = $("#" + modalId);
                                    var inputValue = modal.find(".questionTypeDropdown").val();
                                    modal.find("#pnlPlaceholderFields").show();
                                    modal.find("#choice" + inputValue).show();
                                }
                            </script>
您执行此操作的方式不正确。您应该做的是,使用控制器将模型发送到视图,并基于发送到视图的模型中的特定属性,根据该属性显示部分视图。您正在使用或试图使用您的视图,就像它在控制器所在的位置一样。我认为这种设计违背了MVC的目的。您可能要做的就是将模型从控制器发送到所需的视图:

伪代码示例
Controller Code:
        public IActionResult Find(IFormCollection  搜索 Request)
        {
            //Probe API
            if (!string.IsNullOrEmpty(Request["SearchRequest"]))
            {
                ViewBag.SomeBool= Request["SomeValue"];
                return View("~/Views/Find/PositiveResults.cshtml", ViewBag);
            }
            else
                return View("~/Views/Find/NoResults.cshtml", ViewBag);
        }
然后,您认为您需要做的就是:
View Code:
                @if (ViewBag.SomeBool)
                {
                    Html.Partial("~/Views/PartialViews/PartialTestViewA.cshtml", ViewBag);
                }
                else
                {
                    Html.Partial("~/Views/PartialViews/PartialTestViewB.cshtml", ViewBag);
                }
可以使用您自己的模型替换视包。这就是您应该如何做。

无论如何,关于当前的方法,您所需要做的就是将.js包装在一个脚本标签中。您的代码一目了然。但是,只是为了给您一些与之比较的机会,我为您写了我自己的工作示例。这是运行中的屏幕截图:

0ZoUsB0.gif
视图文件夹目录的屏幕抓图
屏幕截图_51.jpg

Main 查看代码:
<div  类 ="text-center">
    <h1  类 ="display-4">Welcome</h1>
    <select>
        <option>Choose Color</option>
        <option value="red">Red</option>
        <option value="green">Green</option>
    </select>
    <script src="//code.jquery.com/jquery-3.5.1.min.js"></script>
    <script>
        $(document).ready(function () {
            $("select").change(function () {
                $(this).find("option:selected").each(function () {
                    var optionValue = $(this).attr("value");
                    if (optionValue) {
                        $(".color").not("." + optionValue).hide();
                        $("." + optionValue).show();
                    } else {
                        $(".color").hide();
                    }
                });
            }).change();
        });
    </script>
    <div  类 ="green color">
        You have selected <strong>green option</strong>
        <br /><br /><br /><br />
        @Html.Partial("~/Views/PartialViews/green.cshtml", "Your Model here")
    </div>
    <div  类 ="red color">
        You have selected <strong>red option</strong>
        <br /><br /><br /><br />
        @Html.Partial("~/Views/PartialViews/red.cshtml", "Your Model Here")
    </div>

我的局部视图仅包含以下消息:绿色视图中的Hello。&您好从红色视图。

编辑:清理代码
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
函数TogglePlaceholderFieldVisibility(modalId){var modal = $("#"+ modalId); var inputValue = modal.find(".questionTypeDropdown").val(); modal.find("#pnlPlaceholderFields")。显示(); modal.find("#choice"+ inputValue).show(); }
在仔细查看您的来源之后,还有一件事。在您的代码中,您指的是#choice?选择是什么,因为我看不到任何这样命名的类元素或ID。因此,请记住在div上使用名称设置类名和ID,这应该反映您的jquery中散列的标签,否则jquery函数将根本无法工作。

您需要使用这些哈希属性设置div,即 #pnlPlaceholderFields#选择 并将它们添加到您的div中 名称或 ID 。就像我在示例中所做的那样,您还需要在jquery脚本中使用if语句设置条件以隐藏和显示某些div。关于在jquery中使用Find(),它的行为有点像布尔,但是它将搜索dom中的所有元素,然后当它在dom中找到匹配项时,无论是否将div设置为,它都会显示您的选择是否默认隐藏。您可以在这里阅读一些内容: .find()| jQuery API文档 话虽如此,我建议您更改代码以反映我的示例。希望您发现这些帖子以及上面的示例对您有所帮助。
 
最佳 底部