【问题标题】:Redirect to Action-Controller MVC 4 inside Jquery重定向到 Jquery 中的 Action-Controller MVC 4
【发布时间】:2013-05-01 20:52:27
【问题描述】:

我需要一些帮助,因为我对 AJAX 很陌生。在我拥有的给定页面(视图)中,我显示了一个显示表单的按钮。我最终想要的是将该表单中的数据输入传递给我的应用程序内的控制器。我知道有很多关于如何做到这一点的教程......但是,我似乎很难理解这是如何做到的;因此,我想一步一步地遍历这个。我只是想在用户单击对话框上的“保存”按钮后显示不同的视图。我希望这很清楚。这是我的 HTML + jQuery

@model AccommodationEditViewModel

@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<table>
    <tr>
        <td>
        @Html.ActionLink("Back to list", "List", "Accommodation")
        </td>
    </tr>
    <tr>
        <td>    
            @if ( Model.Accommodation.LocaleID != Guid.Empty)
            {
                @Html.DisplayAccommodation(IAccommodationDisplay);
            }
        </td>
    </tr> 
</table>

<div class="genericform">
<form id="form" method="post">

    @Html.AccommodationEditDisplay()
<table>
    <tr>
        <td>
            @Html.ActionLink("Add New Address", "", "", new { id = "addaddresses" }, null)
        </td>
    </tr>
    @if (Model != null && Model.Accommodation.Addresses.Count() == 0)
    {
        <tr>
            <td>
                This Locale Contains No Addresses
            </td>
        </tr>
    }
    else
    {
        foreach (Address address in Model.Accommodation.Addresses)
        { 
            <tr>
                <td>
                    @address.Address1
                </td>
            </tr>
        }
    }
</table>
<br /> <br />
<input type="submit" name="command" value="Save"  />
<input type="submit" name="command" value="Delete" />
</form>
</div>

<button id="opener">Add Address</button>

<div id="dialog" title="Add Address" style="display:none;">
<label for="Address1">Address: </label><input id="Address1" />
<label for="Address2">Address 2: </label><input id="Address2" /> 
<label for="City">City: </label><input id="City" />
<label for="State">State: </label><input id="State" />
<label for="PostalCode">Postal Code: </label><input id="PostalCode" />
</div>

<script type="text/javascript" src="~/Scripts/jquery-1.7.1.js"></script>
<script type="text/javascript" src="~/Scripts/jquery-ui-1.8.20.js"></script>
<link type="text/css" href="~/Content/themes/base/jquery.ui.all.css" rel="stylesheet"  />

<script type="text/javascript">    
$(document).ready(function () {
        $("#dialog").dialog({
            autoOpen: false,
            show: {
                effect: "explode",
                duration: 250
            },
            hide: {
                effect: "explode",
                duration: 250
            },
            buttons: {
                "Save": {
                    text: "Save",
                    class: "",
                    click: function () {
                         //**redirect here**
                        $(this).dialog("close");

                    }},
                "Cancel": {
                    text: "Cancel",
                    class: "",
                    click: function () {
                    $(this).dialog("close");
                }
            }},
            modal: true
        });

        $("#opener").click(function () {
            $("#dialog").dialog("open");
        });
    });
</script>

我尝试使用 $.ajax({}) 并设置:Url: "/Areas/Website/Controller/Action 但是脚本在那时停止工作。 任何和所有的帮助表示赞赏!谢谢!

编辑

我什至需要使用 AJAX 吗?我只想将该表单中的信息(在对话框内)传递给控制器​​。

【问题讨论】:

  • 请提供更多关于视图的详细信息,例如 Html 表单(包括最后的输入按钮,即 type="submit" 的那个)
  • 视图没有什么特别之处。我在那里有帮助显示初始表单。它与我想要完成的事情没有太大关系,即:显示对话框,填写表单,将输入的数据输入控制器,使用 ViewResult 显示该表单。这有意义吗?
  • 相反,您实际上并不需要 ajax 或 jquery 等。这就是为什么我希望您向我展示您的表单,我可以为您提供将数据从表单发送到控制器的步骤.这不是很复杂。
  • 给我一秒钟,我会更新它
  • 我发布了一个新答案。

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


【解决方案1】:

好的,尝试用

替换您的 &lt;form id="form" method="post"&gt; form fields &lt;/form&gt;
@using (Html.BeginForm("NameOfControllerMethod", "NameOfControllerClass")) 
{
<!-- fields for gathering data, your input fields essentially -->
}

那么您需要转到您的控制器类,并在您的控制器方法上方添加 [HttpPost],如下所示:

[HttpPost]
public ActionResult MethodName(AccomodationEditViewModel viewModel) {
//do stuff in here with the viewModel, for example viewModel.Location, or viewModel.Name
}

注意 [HttpPost] 要求您在控制器类的顶部添加一个新的“使用”插入。

NameOfControllerMethod 是上面有 HttpPost 的方法。控制器类的名称类似于“MyClass”,来自名为 MyClassController 的控制器,例如。

【讨论】:

  • 谢谢兄弟!将在一秒钟内尝试此操作。我会尽快将其标记为答案。谢谢!
  • 我唯一担心的是您的表单输入是否可以通过 HttpPost 发布,但唯一的方法是先尝试一下:P
【解决方案2】:

试试这个:

window.location = "/Areas/Website/Controller/Action";

在您的点击函数中。

【讨论】:

  • 这很有帮助,因为我看到了 javascript 和 jquery 可以如何交互......所以这是第一步。现在我如何能够将“数据”(我的表单值)传递到下一页?
  • 这个 jsfiddle 应该会有所帮助。我正在尝试完全执行那里发生的事情,显示一个对话框,获取该数据但是,而不是将其附加到同一视图中的表中,我想调用控制器操作(将表单保存在数据库中等..) JsFiddle
  • 好的,所以您有一个带有表单的视图,然后您想从该表单获取数据,将其传递给控制器​​,然后本质上打开另一个网页(视图)?请给我看你的 Html.BeginForm() 等等
  • 我要提交的表单是对话框中的那个。我更新了初始代码以显示完整视图,但第一个表单是强类型的,与我想要完成的目的无关。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 2013-08-13
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多