【问题标题】:Submit Data from partial view to a controller MVC将数据从局部视图提交到控制器 MVC
【发布时间】:2012-04-24 15:20:41
【问题描述】:

我有一个就业记录列表,您也可以使用部分视图从同一页面添加就业记录。

这里是employment.cshtml,它具有记录列表的部分视图和用于添加新记录的部分视图,该新记录出现在模式弹出窗口中。

<h2>Employment Records</h2>

  @{Html.RenderPartial("_employmentlist", Model);}                              

<p>
<a href="#regModal" class="btn btn_b" rel="fancyReg">Add New Record</a>
</p>

<div style="display:none">
    <div id="regModal"> 
              @{Html.RenderPartial("_AddEmployment", new ViewModelEmploymentRecord());}     

                        </div>
                    </div>

这里是部分视图_AddEmployment.cshtml

@using (Html.BeginForm("AddEmployment, Application"))
{                   
@Html.ValidationSummary(true)

<div class="formEl_a">

<fieldset>
    <legend></legend>

     <div class="sepH_b">

            <div class="editor-label">
                @Html.LabelFor(model => model.employerName)
            </div>

         etc....etc....

</fieldset>

</div>
  <p>
        <input type="submit" class="btn btn_d" value="Add New Record" />

    </p>


}

这是我的应用程序控制器:

[HttpPost]
    public ActionResult AddEmployment(ViewModelEmploymentRecord model)
    {
        try
        {
            if (ModelState.IsValid)
            {

                Add Data.....
            }
        }
        catch
        {

        }

        return View(model);
    }

编译时为表单生成如下html:

<form action="/Application/Employment?Length=26" method="post"> 

它带来了一个长度字符串?而是调用就业控制器?

希望一切都清楚......

问题一:当我从局部视图中单击提交按钮时,它不会转到指定的控制器以添加数据。谁能看到我哪里出错了?

问题二:当我开始工作时,我想用新记录更新就业清单....我这样做的方法是否正确?任何提示表示赞赏。

【问题讨论】:

  • 问一个问题:如果你在你的应用程序的 catch 块中放了一些东西。控制器,这会提供一些见解吗?
  • 1) 在使用魔术字符串时,我会停止使用Html.BeginForm,而只是自己手动编写&lt;form&gt; 标签。首先尝试一下,看看您是否可以发布到您的操作方法。 2)假设您的意思是检查ModelState.IsValid 标志?这只有在您使用 DataAnnotations 时才会真正有用。
  • 当我编译页面时,表单标签会生成 ok
    。然而,这似乎是错误的控制器,就业而不是 addEmployment??我已经用这个信息更新了主帖

标签: asp.net-mvc razor asp.net-mvc-partialview


【解决方案1】:

答案 1:首先试试这个,如果它击中你的控制器,请告诉我。

 @using (Html.BeginForm("AddEmployment", "Application", FormMethod.Post))

答案 2:要更新就业列表,我假设您希望将模型保存到数据库中,然后将您的就业列表显示在同一页面或不同页面上,将数据库中的数据调用到列表中或要显示的表格。

编辑: 看起来好像您的表单属性没有被应用。 对于您的employment.cshtml,我个人不会在我的@Html 语句周围使用{}。 你不能做我上面所说的,因为你的错误只有在我写成时才会发生

 @using (Html.BeginForm("AddEmployment, Application", FormMethod.Post))

缺少那些结束引号是导致您的问题的原因。

【讨论】:

  • 附注。我不会在一般情况下使用 try catch。只捕获您知道可能发生的错误。然后尽可能指定它。比如空异常。这是一个非常普遍的异常类型。如果您担心未捕获的异常,最好的处理方法是在您的站点上放置类似 ELMAH 的东西来捕获和记录这些错误。
  • 它不允许我添加表单方法....我收到以下错误:****Error 'System.Web.Mvc.HtmlHelper' does not contain a definition对于 'BeginForm' 和最佳扩展方法重载 'System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper, string, string)' 有一些无效参数 Views\Application_AddEmployment.cshtml ***跨度>
  • 请将此代码:("AddEmployment, Application", FormMethod.Post) 更改为:("AddEmployment", "Application", FormMethod.Post),您将不再遇到错误,您的表单应该发布到正确的控制器。 最好的问候
  • ARRRRRRRRGGGGHHHH!当然!感谢您的帮助,现在点击控制器并保存。现在可以在没有回发的情况下刷新视图!
【解决方案2】:

jQuery 代码:

window.jQuery(document).ready(function () {
    $('#btnsave').click(function () {

        var frm = $("form");
        var data = new FormData($("form")[0]);
        debugger;
        $.ajax({
            url: '/Home/Update',
            type: "POST",
            processData: false,
            data: data,
            dataType: 'json',
            contentType: false,
            success: function (response) {
                alert(response);
            },
            error: function (er) { }
        });
        return false;
    });

});

控制器代码

[HttpPost]
    public JsonResult Update(Generation obj)
    {
        if (ModelState.IsValid)
        {
            return Json("done");
        }
        else
        {
            return Json("error create");
        }
    }

使用这些代码,您可以使用 jquery 发布表单并在 jsonresult 中获得响应

【讨论】:

    【解决方案3】:

    我知道这是很老的问题 它对你不起作用的原因是因为你的语法 这是你的代码

    @using (Html.BeginForm("AddEmployment, Application"))
    

    修复

    @using (Html.BeginForm("AddEmployment", "Application"))
    

    问候

    【讨论】:

      【解决方案4】:

      你已经把 @using (Html.BeginForm("AddEmployment, Application")) 放在了这里试图做的是调用一个名为 "AddEmployment, Application" 的动作我想你的意思是 @using (Html.BeginForm("AddEmployment", "Application"))

      【讨论】:

      • 我试图在应用程序控制器中调用 AddEmployment 操作。你回答的第二部分和我的一样吗?
      • 我只是在阅读其他答案后看到它不一样......谢谢!
      • @Dez79 我向您展示了您还没有关闭引号,所以它只是读取为动作而不是 2 参数动作和控制器
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      相关资源
      最近更新 更多