【问题标题】:Confusion with MVC and how it handles forms与 MVC 的混淆以及它如何处理表单
【发布时间】:2012-03-19 22:40:44
【问题描述】:

我精通 ASP.NET WebForms,并且正在考虑将我的代码切换到 MVC 3。

我正在学习MVC,对它有一些了解,但是,有一个问题我还没有理解。

是这样的:

使用 WebForms 代码,我能够拥有一个 DropDownList,当被选中时,它会通过 Javascript 触发按钮按下,并且该按钮会触发一个填充另一个 DropDown 的方法,但两个 DropDown 都是同一表单的一部分,并且用户可见的实际按钮(并且将由用户手动按下)触发一个方法,该方法从这些 DropDowns 以及其他字段中获取值。

问题是,我不知道如何用 MVC 做到这一点。根据我目前的理解,如果我想将表单数据发送到应用程序,它必须遵循一个模型。这就是让我如此困惑的原因(根据我目前的理解),我如何让第一个 DropDown从第一个 DropDown 内部发送数据?使用 MVC 填充另一个下拉列表也是一个有点模糊的想法,但尤其是我关于第一个 DropDown 的观点是最让我困惑的。

如果有人能以任何方式帮助我,将不胜感激。

【问题讨论】:

  • 在 MVC 中,这类东西需要由您编写 :) 在您的情况下,对于下拉列表,您需要一个用于 onchange() 事件的 javascript,该事件将执行一些 AJAX 级联另一个下拉

标签: asp.net asp.net-mvc-3 razor webforms


【解决方案1】:

我只记得几年前我问过的这个问题。另一种方法是将 $.get(...) 与 jQuery 一起使用(现在有据可查...)

【讨论】:

    【解决方案2】:

    让您了解这里的最大区别在于 ASP.NET MVC 中没有旧式回发。

    在这种情况下,您可以控制如何为下拉框获取新数据。

    当表单完成并且我们准备好将数据发送到服务器时,我们会将其作为特定类型发送回我们的控制器方法,但在那之前,我们可以从任何地方访问我们需要的数据其他控制器方法。

    我个人会使用 jQuery 来执行此操作,使用 ajax 请求到返回 JsonResult 类型的控制器方法。

    类似:

    $.getJSON("/MyController/GetSecondDropdownValues", function(result) {
     $.each(result, function() {
        $('#mySecondDropdown').append($("<option />").val(this.Name));
    });
    

    C#

    public JsonResult GetSecondDropdownValues(string initialDropdownValue)
    {
       /* Do the work to obtain the values here */
       return Json(returnedValues);
    }
    

    【讨论】:

      【解决方案3】:

      Asp.net clasic 遵循与 asp.net mvc 不同的思维方式。第一个尝试模仿桌面表单应用程序并抽象(隐藏)Web 平台细节。 Asp.net mvc 虽然是一个基于 MVC 的框架,但它实际上是一个“真正的”网络框架,因为它不会试图向你隐藏任何与网络相关的内容。

      话虽如此,浏览器提交的数据实际上是“更新模型的数据”,而不是模型本身。在大多数教程中,您会看到返回的视图模型(或其中的一部分),但它只是浏览器提交的数据。对于 asp.net mvc 应用程序中的模型有很多混淆。

      如何让第一个 DropDown 只发送来自第一个 DropDown 内部的数据

      您将该下拉菜单设置为表单的唯一元素。在 asp.net mvc 中,您可以在一个页面中拥有任意数量的表单(只要您不混合它们),asp.net mvc 不遵循 webforms 的表单思维方式。

      或者,您可以通过 ajax(使用 jQuery)将字段的值提交给控制器,该控制器返回将在客户端处理的 json。 And probably that's how you popoulate the second dropdown, when the first is selected, an ajax request is sent to an action of the controller which returns the content of the second dropdown as json, which is then inserted via javascript.

      一个简单的提示,让您更容易过渡到 asp.net mvc:任何与视图相关的内容(html - 包括表单、javascript 等)都独立于控制器。视图只关心它的(视图)模型,控制器关心它接收到的数据。控制器返回一个通常是 view 的结果,但也可以是任何东西。控制器对视图细节(html、js)一无所知,它只知道视图数据(视图模型)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-09
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多