【问题标题】:Sending form data via AJAX and populating a div with the results通过 AJAX 发送表单数据并使用结果填充 div
【发布时间】:2020-09-29 20:25:09
【问题描述】:

我想进行 AJAX 调用以提交来自“数据”div 的数据并使用结果填充结果 div。

此时,它不会在提交时调用 AJAX。如果我不想以这种方式提交,我什至应该使用 html.BeginForm() 吗?

$.ajax({
type: 'POST',
url: '@Url.Content("~/ControllerName/ActionName")',
data: ModelName,
success: function(result) {
$('#Results').data = result;
}});*@



@using (Html.BeginForm("Index", "ControllerName", FormMethod.Post))
{
  <div id="Data">

  @Html.DropDownListFor(x => x.ID, new SelectList(Model.Stuff, "ID", "Name"), "Choose")
   //more dropdown lists
  

<input name="SubmitButton" type="submit" id="Submit" value="Submit"/>

  </div>
 }


 <div id="Results">

   @Html.DisplayTextFor(x => x.Sum)

 </div>

【问题讨论】:

    标签: jquery ajax asp.net-mvc


    【解决方案1】:

    https://dotnetfiddle.net/XQdmK1

    控制器/视图模型

    public class Stuff
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    public class JohnViewModel
    {
        public int ID { get; set; }
        public IList<Stuff> Stuff { get; set; }
        public int Sum { get; set; }
    }
    public class HomeController : Controller
    {
        public ActionResult Index18()
        {
            var stuff1 = new Stuff { ID = 1, Name = "Name1" };
            var stuff2 = new Stuff { ID = 2, Name = "Name2" };
            var stuff3 = new Stuff { ID = 3, Name = "Name3" };
            var viewModel = new JohnViewModel();
            viewModel.Sum = 27;
            viewModel.Stuff = new List<Stuff>();
            viewModel.Stuff.Add(stuff1);
            viewModel.Stuff.Add(stuff2);
            viewModel.Stuff.Add(stuff3);
            return View(viewModel);
        }
    
        [HttpPost]
        public ActionResult JohnUpdate(string myvar)
        {
            var q = myvar;
            return Json(q, JsonRequestBehavior.AllowGet);
        }
    

    查看

    @model WebApplication2.Controllers.JohnViewModel
    @{
        Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index18</title>
        <script src="~/Scripts/jquery-3.4.1.min.js"></script>
        <script>
            $(function () {
                $("#Submit").click(function () {
                    $.ajax({
                        url: '/home/JohnUpdate',
                        type: "POST",
                        //dataType: "JSON",
                        data: { myvar: $("#selector option:selected").text() },
                        success: function (data) {
                            $("#Results").text(data);
                        },
                        error: function (xhr, ajaxOptions, thrownError) {
                            alert(xhr.status);
                            alert(thrownError);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <div id="Data">
            @Html.DropDownListFor(x => x.ID, new SelectList(Model.Stuff, "ID", "Name"), "Choose", new { id = "selector" })
            @*more dropdown lists*@
            <input name="SubmitButton" type="button" id="Submit" value="Submit" />
        </div>
        <div id="Results">
            @Html.DisplayTextFor(x => x.Sum)
        </div>
    </body>
    </html>
    

    【讨论】:

    • 谢谢!!我注意到它返回了第二个 div 的整个 HTML。我如何让它呈现而不只是打印出 HTML 的文本? :)
    • 如果你做一个查看页面,点击提交按钮后第二个 div 看起来像这样
      27
      所以内容“27”被覆盖例如,将 javascript 转换为“Name2”,并且视图源仅显示原始 DOM。 $("#Results").text(data);在 div 中添加文本。像
      Name1
      。请问我,以防我不明白您需要什么。
    • 我想通了。它应该是 $("#Results").html(data);感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多