我创建了一个MVC3应用程序。视图中有很多HTML标签,我没有使用Razor视图html标签,因为我们使用sitecore进行内容管理。 (我们使用简单的html标签,如<input type="textbox" id="">
)
在页面的最后,我有一个名为GET a Quote
的按钮。单击此按钮,我们需要在同一个按钮上显示Loader,然后我们必须重定向到另一个页面。
在重定向之前,我们需要捕获所有表单值,我们必须计算引号,即我们必须在Controller
方法/操作中获取表单值。
有人可以建议我,这是最好的办法吗?
据我所知,
Submit
我们可以GET a Quote
,我们可以使用
[HttpPost] public ActionResult(FormCollection表单) { }
但是在这里,我们如何在提交按钮上显示Loader图像。
我们可以将GET a Quote
作为超链接,我们可以调用脚本,它将捕获所有表单值,然后我们可以将其传递给Controller操作方法。
但问题是,有些字段会动态添加。这些动态添加的字段将具有动态创建的ID
。我们如何捕获所有表单数据?
请建议。
答案 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(); }
});