【问题标题】:Partial view method only triggered once on button click部分视图方法仅在按钮单击时触发一次
【发布时间】:2017-06-28 04:03:15
【问题描述】:

我有一个审核表单,它会生成一组问题和一组答案选项,当您单击 adhoc 按钮时,它能够生成一个新的 adhoc 问题。

adhoc 是附加到其正下方的主视图的局部视图。当我单击按钮生成即席问题时,会出现即席部分视图。

我可以输入我的问题并选择无线电回答选项。当我再次单击临时按钮时,会出现表单,但是当我尝试为第二个临时问题选择答案时,它会删除我为第一个临时问题选择的答案!

我在 PartialViewResults Adhoc() 上设置了一个断点,我注意到在第一次单击 adhoc 按钮时,Adhoc() 会执行。该方法执行并给局部视图一个 id。在第二次按钮单击时,该方法不执行。它以与第一个临时局部视图相同的 id 附加到主视图。

我似乎无法弄清楚如何在每次单击按钮时执行该方法。下面的链接包含代码/html。

$(function () {

    $('.btnAdhoc').click(function (event) {
        event.preventDefault();

        $.ajax({
            url: '/ProjectManagers/Forms/Adhoc',
            //data: JSON.stringify(model),
            type: 'get',
            success: function (result) {
                $('#adhoc').append(result);
            }
        });
    });
});

更新 1

下面链接到我之前的上一个问题包含所有 HTML/CODE

How to pass Model from View to Controller, add items to list, pass back to view

更新 2

改写我的问题,我希望这能消除困惑。

更新 3

似乎是与 Internet Explorer 相关的问题。它适用于 chrome,但我需要它才能在 IE 中运行。

更新 3:已修复

通过在函数脚本中添加 cache: false 来修复。

【问题讨论】:

  • 你能改写问题描述并制作一个可重现的 jsfiddle 或 codepen 吗?没有 HTML,真的很难理解你在问什么......
  • 我不久前添加了一个问题的链接,该问题的代码/html 没有改变。

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

请试试这个例子,并记下我输入的 cmets。

查看:

@model Testy20161006.Controllers.ViewModel
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>IndexValid8</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnClick").click(function () {
                var PassDDLView = { ddlValue: $("#passThis").val() };
                //took out your preventDefault
                //your url should be /Controller/Action, so I am doint this
                $.ajax({
                    url: '/Home/AdHoc',
                    type: 'GET',
                    data: PassDDLView,
                    success: function (result) {
                        alert(result.Component);
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert(xhr.status);
                        alert(thrownError);
                    }
                });
            })
        })
    </script>
</head>
<body>
    <div class="form-group">
        @Html.DropDownListFor(m => m.ComponentId,
                         new SelectList(Model.ComponentList, "Value", "Text"), new { id = "passThis" })
        <input type="button" id="btnClick" value="submitToAjax" />
    </div>
</body>
</html>

控制器/视图模型:

//You can put this in a model folder
public class ViewModel
{
    public ViewModel()
    {
        ComponentList = new List<SelectListItem>();
        SelectListItem sli = new SelectListItem { Text = "component1", Value = "1" };
        SelectListItem sli2 = new SelectListItem { Text = "component2", Value = "2" };
        ComponentList.Add(sli);
        ComponentList.Add(sli2);
    }

    public List<SelectListItem> ComponentList { get; set; }
    public int ComponentId { get; set; }
}

public class PassDDLView
{
    public string ddlValue { get; set; }
}

public class HomeController : Controller
{
    [HttpGet]
    public ActionResult AdHoc(PassDDLView passDDLView)
    {
        //put a breakpoint here to see the ddl value in passDDLView
        ViewModel vm = new ViewModel();
        return Json(new
        {
            Component = "AComponent"
        }
        , JsonRequestBehavior.AllowGet);
    }

    public ActionResult IndexValid8()
    {
        ViewModel vm = new ViewModel();
        return View(vm);
    }

【讨论】:

  • 我刚刚发现我的问题是在使用 Internet Explorer 进行调试时出现的问题。它适用于铬。我会试试这个
  • 通过在函数脚本中添加缓存修复:false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多