如果我们没有模型,如何在MVC3应用程序中捕获表单值?

时间:2013-08-24 13:30:32

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

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

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

在重定向之前,我们需要捕获所有表单值,我们必须计算引号,即我们必须在Controller方法/操作中获取表单值。

有人可以建议我,这是最好的办法吗?

据我所知,

  1. Submit我们可以GET a Quote,我们可以使用

    在Controller方法中捕获此值

    [HttpPost]     public ActionResult(FormCollection表单)     {     }

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

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

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

    请建议。

3 个答案:

答案 0 :(得分: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. *@
}

答案 1 :(得分: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 }
            });

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

答案 2 :(得分: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)通过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(); }
    });