0

我创建了一个 MVC3 应用程序。视图中有很多 HTML 标签,我没有使用 Razor 视图 html 标签,因为我们使用 sitecore 进行内容管理。(我们使用简单的 html 标签,如<input type="textbox" id="">

在页面的末尾,我有一个名为 的按钮GET a Quote。单击此按钮时,我们需要在同一个按钮上显示 Loader,然后我们必须重定向到另一个页面。

在重定向之前,我们需要捕获所有表单值并且我们必须计算报价,即我们必须在Controller方法/动作中获取表单值。

任何人都可以建议我,这是最好的方法吗?

据我所知,

  1. 我们可以有Submitfor GET a Quote,我们可以在 Controller 方法中使用

    [HttpPost] public ActionResult(FormCollection form) { }

    但是在这里,我们如何在提交按钮上显示加载器图像。

  2. 我们可以制作GET a Quote为超链接,我们可以调用脚本,该脚本将捕获所有表单值,然后我们可以将其传递给控制器​​操作方法。

但是这里的问题是,一些字段将被动态添加。这些动态添加的字段将具有动态创建的ID。我们如何捕获所有表单数据?

请建议。

4

3 回答 3

0

如果您不想使用模型绑定,则必须采用以下方法:

1)从请求中获取它们:

[HttpPost]
public ActionResult SubmitAction()
{
    var id = Request["id"];
    var value2 = Request["name2"];
    var value3 = Request["name3"];
    // also for other inputs of the form which have name attribute...    
}

2) GetThem 通过FormCollection

[HttpPost] 
public ActionResult SubmitAction(FormCollection frm)
{    
    string id = frm.Get("id");
    string value2 = frm.Get("name2");
    string value3 = frm.Get("name3");
    // also for other inputs of the form which have name attribute...
}

请注意,第一种方式为您提供对象(我使用的原因var),因此您需要适当地转换它们。但是,第二种方法为您提供了字符串(我使用的原因string- 只是为了提一下)。

关于加载器图像,我更喜欢在按钮旁边显示加载器,而不是在提交按钮本身上显示加载器。为此,您可以添加加载程序,如下所示:

<img id="imgSpinner" src="..." style="display:none" />

然后你可以通过ajax进程显示和隐藏它:

$.ajax({
        url: '...',
        type: 'POST',
        // ... other ajax options ...
        beforeSend: function () { $("#imgSpinner").show(); },
        complete: function () { $("#imgSpinner").hide(); }
    });
于 2013-08-25T07:34:54.343 回答
0

您应该为元素添加name属性:input

<input type="text" id="someId1" name="someName1" />
<input type="text" id="someId2" name="someName2" />
<input type="text" id="someId3" name="someName3" />
<input type="text" id="someId4" name="someName4" />

当一个动作被调用时,你的FormsCollection对象将接收所有的值,不管它们是否是动态添加的。

至于加载器图像,您想使用 ajax 提交值。这样,您可以指定图像应该出现的时间间隔。尝试使用:

@using(Ajax.BeginForm("YourActionName", 
    new AjaxOptions {
        UpdateTargetId = "elementIdThatReceivesResult",
        Url = Url.Action("YourActionNameForAjaxRequests"),
        LoadingElementId = "IdOfYourLoader",
        LoadingElementDuration = 500 
    })) {
    @* Your input elements and submit. *@
}
于 2013-08-24T13:37:51.103 回答
0

好吧,我认为使用 ajax 和 json 可以帮助您将数据从视图发送到控制器。

 jQuery.ajax({
                url: '@Url.Action("ActionName", "ControllerName")',
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ Id: Id }),
                success: function (result) { //some code }
            });

我用这种方式将数据传递给没有模型的控制器。

于 2013-08-24T15:39:38.637 回答