7

Html.Beginform在视图页面中使用并获取使用FormCollection到控制器的参数我想在相同ViewPage的结果上返回成功消息。我正在使用以下代码,

public string InsertDetails(FormCollection collection)
{     
     string result = "Record Inserted Successfully!";
     return result; 
}

它在新页面上显示成功消息。我该如何解决这个问题?我必须返回什么才能在同一页面上获得成功消息?

4

3 回答 3

13

就个人而言,我会将结果字符串弹出到 ViewBag 中。

public ActionResult InsertDetails(FormCollection collection)
{
         //DO LOGIC TO INSERT DETAILS
         ViewBag.result = "Record Inserted Successfully!";
         return View(); 
}

然后在网页上:

<p>@ViewBag.result</p>
于 2013-07-11T10:02:20.300 回答
12

我有以下选项。

1. 使用带有 AjaxOptions 的 Ajax Begin Form,如下所示

@using (Ajax.BeginForm("ActionName", "ControllerName", new { area = "AreaName" }, new
    AjaxOptions
    {
        HttpMethod = "POST",
        OnSuccess = "alert('Success');" //This will execute once the Ajax call is finished.

    }, null))
{
    <input type="submit" name="nameSubmit" value="Submit" />
}

2. 使用 JQuery 手动设置 XHR 请求

$.ajax({
    url: "@Url.Action("ActionName", "ControllerName", new { area = "AreaName" });",
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({param : Value})
})
.done(function () { alert('Success');}) //This will execute when you request is completed.
.fail(function () { })

我的建议

使用 FormCollection 有以下缺点

点 - 1

如果FormCollection正在使用...这将是不必要的,因为在获取特定索引的条目时,返回Type Cast的值是类型的。这种情况不会出现在 Strongly Typed 的情况下。Primitive TypeSystem.Collections.Specialized.NameValueCollectionStringView-Models

问题 - 2

当您提交表单并转到PostAction Method时,View-Model由于 Action 方法中存在 Parameter,您可以将 Posted Values 发回给您View。否则,再次编写代码以发送回TempData/ViewData/ViewBag

在此处输入图像描述



点 - 3

我们有可以在View Model或中实现的数据注释Custom Validations

在此处输入图像描述

ASP.Net MVC 使用数据注释简化模型验证。数据注释是应用于属性的属性。我们可以通过继承内置的验证属性类来创建自定义验证属性。



点 - 4

示例您有以下HTML

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" />

问题:我们如何从上面访问 customAttr1 的值,例如从控制器内部

:当一个表单被发布时,只有元素的名称和值被发布回服务器。您还可以使用隐藏字段将属性发布到发布操作方法

替代方案:使用一些 jQuery 获取自定义属性值,并将其与表单值一起发布到操作方法

另一种选择是将您在自定义属性中获得的内容放在隐藏控件中




这就是原因,我总是更喜欢使用View-Models

于 2013-07-11T10:50:29.743 回答
0

我们可以在 Form inside view 上做

   @using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "POST", OnSuccess = "Showmessage" }))

    [HttpPost]
    public ActionResult Test(TestViewModel model)
    {
         return Json(new {isok=true, message="Your Message" });          
    }

    function Showmessage(data)
    {
      $('#Element').html('Successfully Submitted');
    }
于 2016-06-15T09:27:34.553 回答