【问题标题】:In asp.net razor mvc How do I utilize the selected dropdown item within a if statement, within a div?在 asp.net razor mvc 中,如何在 div 中的 if 语句中使用选定的下拉项?
【发布时间】:2014-10-15 08:41:41
【问题描述】:

这个问题不是重复的。

上面那个问题,建议重复问如何在Java和asp.net之间使用同一个变量。

而这个问题接受前一个是不可能的,而是询问其他方法是可能的吗?

在 asp.net razor mvc 中,如何在 div 中的 if 语句中使用选定的下拉项?

从下面的代码可以看出,我创建了一个dropdown 并用数据填充它。

我希望在下面div中使用所选项目。

  • 当用户点击一个项目时,div 中包含的内容就会显示出来
  • 然后选中的字符串项用在if statementdiv

目前发生的情况是,所选项目不可全局访问,导致您在下面看到的问题。

但正如其他有知识的人告诉我的那样,您不能在 javascriptasp.net mvc razor 之间使用相同的变量。所以下面的行不通。

如何做到这一点? (在 if 语句中,在 div 中使用选定的下拉项?)

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <div class="display-field" align="left">
        <select name="mydropdown" id="mydropdown" onchange="onChange()">
        @foreach (var lLMMI in lIM)
        {
            <option value="@lLMMI.Key.Product.PCode">
                @locItem.Key.Loc.N (@lLMMI.Key.Loc.Code)
            </option>
        }
        </select>
        <br /><br />
    </div>
}

var itemselected = "";

<div>
    <script>
        function onChange() {
            var item = document.getElementById("mydropdown").value;
            $('#summary').show();
        }
    </script>

    <div id="summary">

        @foreach (var lLMMI in lIM)
        {
            if (@lLMMI.Key.Pro.PCode == itemselected.toString())
            {
                <summary>extra html elements are added etc.</summary>
            }
        }

【问题讨论】:

  • 它不是重复的,因为该问题询问如何在 Java 和 asp.net 之间使用相同的变量。
  • 而这个问题接受前一个是不可能的,而是问其他方法是可能的吗?
  • 接受的答案显示了两种方法 - 重新加载页面或使用 ajax 更新现有页面。
  • 好的,我会尽快发布一个通用答案,您可以根据自己的需要进行调整。

标签: javascript c# asp.net asp.net-mvc razor


【解决方案1】:

您应该只使用 javaScript。按如下方式更新您的代码:

<script>
    var serverCode = "@lLMMI.Key.Pro.PCode"; // get the server value on JS
    function onChange() {
        var localCode = $("#mydropdown").val();
        if(localCode == serverCode)
           $("#extrasummary").show();

        $('#summary').show();
    }
</script>

<div id="summary">
    <div id="extrasummary" style="display:none">extra html elements are added etc.</div>
    ....
</div>

【讨论】:

  • 选择的值需要传递给if语句,而不仅仅是隐藏和显示div
  • 但是您在 JS 代码中将其作为变量。那里不能用吗?
  • 虽然此代码简化了实现并且速度更快(最适合选项小于 10 的情况),但它不适合 'lLMMI.Key.Pro.PCode' 有很多选项的情况.您必须在 cshtml 代码中处理每种情况。
【解决方案2】:

处理下拉列表的更改事件并进行 ajax 调用以返回可以使用 jquery .load( 添加到 DOM 的部分视图。请注意在您的视图中删除@foreach,这样您就有了

<div id="summary"></div>

返回的 html 将显示在哪里

脚本

$('#mydropdown').change(function() {
  var selectedID = $(this).val();
  var url = '@Url.Action("Details", "YourController")';
  $('#summary').load(url, { ID: selectedID });
});

控制器

public ActionResult Details(int ID)
{
  var model = // Get the details based on the selected ID
  return PartialView("Details", model);
}

另请注意,从您的&lt;select&gt; 中删除onchange="onChange()。我还建议你学习使用@Html.DropDownListFor() 来生成&lt;select&gt; 控件

【讨论】:

  • 如何将值传递给上述if语句??
  • 正如我所指出的,只需删除 &lt;div id="summary"&gt; 标签之间的所有代码。 if 语句没有意义,因为它在发送到客户端之前在服务器上呈现,所以此时用户还没有选择一个项目。我发布的脚本在用户选择它时获取所选项目的值,将其传递给控制器​​方法,该方法返回包含基于该值的详细信息的部分视图(我不知道你想显示什么,所以你需要创建部分)然后将其插入到&lt;div&gt;
  • 这个解决方案的优点是尽可能保持视图哑(MVC 的关键目标)。控制器将根据用户选择决定显示什么。 +1 花时间写出来... :)
  • 如何隐藏(或停止渲染)该 div 中生成的内容,直到用户从下拉列表中选择了一个项目。然后根据用户的选择生成 div 中的内容,利用上面表示的选定下拉值
  • 对不起,我不明白你的意思。如果删除 &lt;div id="summary"&gt; 标签之间的所有代码/html,则最初不会显示任何内容。当您选择一个项目时,将显示该项目的详细信息。当您选择另一个项目时,将在其位置显示一组新的详细信息。试一试吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2013-04-12
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多