【问题标题】:Passing strongly type form model data in asp.net mvc through jquery通过jquery在asp.net mvc中传递强类型表单模型数据
【发布时间】:2011-11-03 23:18:53
【问题描述】:

很容易将表单提交到具有强类型文本框的控制器中的操作方法,例如,使用提交按钮,但如果我想通过 jquery 发送与强类型文本框完全相同的表单,也许 $单击其他内容后调用 .ajax。

这样的代码:

 @Html.TextBoxFor(m => m.topTenFav.YoutubeLink,new { id="youTubeLinkTxt"})

为我们完成所有工作,在控制器中映射对象的属性非常简单

 [HttpPost]
 public ActionResult AddTopTenFav(HomeViewModel topTen)
 {
     topTen.topTenFav.Date = DateTime.Now;
     topTen.topTenFav.UserName = User.Identity.Name;
     repository.AddTopTen(topTen);
     repository.Save();
     return RedirectToAction("Index");
 } 

如何将此表单发送到控制器,将表单中的文本框映射到单击事件上的对象属性,例如

 $("#btnAddGenre").click(function () {}

 @using (Html.BeginForm(
        "AddTopTenFav", "Home", FormMethod.Post, new { id = "AddTopTenFavForm" }))
 {

    <span id="youTubeLinkSpan">Youtube Link</span>
    <div>
        @Html.TextBoxFor(m => m.topTenFav.YoutubeLink,new { id="youTubeLinkTxt"})
    </div>
    <span id="youTubeNameSpan">Song Title</span>
    <div>
        @Html.TextBoxFor(m => m.topTenFav.Title,new { id="youTubeNameTxt"})
    </div>

    <button type="submit" name="btnSubmit" value="">submit</button>
 }

【问题讨论】:

  • 为什么要在一个匿名函数中放置一个表单来触发点击事件?
  • 在更详细地查看了您的代码后,我注意到您刚刚忘记关闭点击功能,关于能够进行 ajax 调用,asp.net mvc 有一个帮助程序 Ajax.BeginForm,那样如果你愿意,你可以使用内置的支持。

标签: asp.net-mvc-3 jquery


【解决方案1】:

你可以发以下帖子:

$(document).ready(function(){
    $('#btnAddGenre').click(function () {
        $.post(
            $('#AddTopTenFavForm').attr('action'),
            $('#AddTopTenFavForm').serialize,
            function (data) {
                window.location = @Url.Action("Index");
            },
            'html' // returned data type
        );
    });
});

我使用 html 数据类型,因此您可以返回任何您想要的内容,并且重定向发生在 window.location 上,使用 @Url.Action 提供位置。

如果有效,请标记为已接受的答案

【讨论】:

  • 您将 javascript 放在您的视图中。我变了一点。再试一次,告诉我发生了什么。
【解决方案2】:

是的,您可以使用 jquery 发布强类型 textboxex 的数据。 首先你必须做 使用下面的代码获取 jquery 中所有 textboxex 的值。

            var xx= $("#xx").val();

这将从您的 mvc 文本框中给出 xx 中的 val。 然后通过使用 jquery ajax call 你可以调用 action 方法。 代码如下。

$.get("/XXXX/YY/1", { xxName: xx }, function (data) {
                    var status = data;
                    alert(status);
                    if (status) {
                        return true;
                    }
                    else {
                        alert("The book with this name is already present. TRY DIFFERENT NAME!")
                        return false;
                    }
                });

这里 xxxx 是控制器,yy 是操作方法名称。下一个参数是您要作为参数发送的所有文本框的值。 这将执行 ajax 调用并返回值。

如果您发现任何问题,请告诉我,我会给出整个代码。

【讨论】:

  • 不错的解决方案。您假设他从控制器返回 true 并手动创建您想要通过 get 请求传递的所有参数。
  • 不,我认为当他使用 razor 在 MVC3 中工作时,我认为他可以理解他需要获取或发布的内容。所以他可以操纵它。符合他的要求。因为我已经复制并粘贴了 jquery 代码,所以我错误地忘记将其更改为发布。对于参数,您可以在 jquery 中获取参数,并且可以使用此过程轻松地在 post 方法中发送值。你可以试试这个方法,因为它很简单谢谢你提醒我我的错误谢谢
  • 很抱歉没有回答,但这对我来说真的不起作用。我找到了 mz 问题的有效解决方案 $.post("/Home/AddTopTenFav", $("#AddTopTenFavForm").serialize(), function(json) { // handle response }, "json");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 2017-03-29
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多