【问题标题】:How to collect page's data with POST request?如何通过 POST 请求收集页面数据?
【发布时间】:2016-09-20 12:15:16
【问题描述】:

假设我有一个包含一些信息和表单的简单页面。

@using (Html.BeginForm("UpdateOrder", "OrderController", FormMethod.Post)) {
      // some inputs here
}
<p id="user_info">Some text here</p>

所有输入的数据都将像模型一样或通过 FormCollection 发送到控制器。

但是,我还想向控制器发送任何文本\图像,通常是来自位于表单之外的页面的任何信息。这里以 id 为“user_info”的文本为例。

我想知道它是否可以在没有 jQuery 的情况下仅通过使用默认 Controller 的功能来实现。

【问题讨论】:

  • 如果你不想使用 jQuery/javascript,你应该将数据保存在带有输入字段的表单中,这样当你提交表单时它也会被提交到服务器。
  • 简短回答是否定的。表单仅提交其成功控件(输入、文本区域、选择)的名称/值对

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


【解决方案1】:

你可以简单地做到这一点

1- 如果您想上传一些文档或图片,而不是您的表单应该是这样的 以下代码:

@using (Html.BeginForm("ApplyOnline", "Applieds", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
  @Html.AntiForgeryToken()
  <input type="hidden" name="JobId" id="JobId" value="@ViewBag.JobId" />

  @Html.ValidationSummary(true, "", new { @class = "text-danger" })

   <div class="form-group">
      <label class="control-label col-md-3">First Name (اسم)</label>
      <div class="col-md-8">
      @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control",@required="required" } })
      @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
   </div>
  </div>
   <input type='file' name='pmd' id='pmd' />
<input type="submit" value="Apply" class="btn btn-primary"  />
}

在 post 方法中比在 counterroller 中

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ApplyOnline([Bind(Include = "Id,JobId,FirstName")] Applied applied, HttpPostedFileBase pmd, int JobId)
{
  if (ModelState.IsValid)
  {
            //---save the data---------//
            db.MyAppliedContext.Add(applied);
            db.SaveChanges();
            //---Get inserted Id----//
            int insertedId = applied.Id;
             //--------Upload PMD-------------------//
            if (pmd != null && pmd.ContentLength > 0)
            {
                try
                {
                    var PMDFileName = "PMD-" + applied.JobId + "-" + TrimedUser + "-" + insertedId + "-" + pmd.FileName;
                    //var P11FileName = DateTime.Now.ToString();
                    string path = Path.Combine(Server.MapPath("~/App_Data/system"),
                                               Path.GetFileName(PMDFileName));
                    pmd.SaveAs(path);
                    UploadFiles MyPMDUploads = new UploadFiles();
                    MyPMDUploads.JobId = applied.JobId;
                    MyPMDUploads.ApplyId = insertedId;
                    MyPMDUploads.FileName = Path.GetFileName(PMDFileName);
                    MyPMDUploads.FilePath = path;
                    db.MyUploadFileContext.Add(MyPMDUploads);
                    db.SaveChanges();

                    ViewBag.Message = "PMD uploaded successfully";
                }
                catch (Exception ex)
                {
                    ViewBag.Message = "ERROR PMD:" + ex.Message.ToString();
                }

            }
            else
            {
                ViewBag.Message = "You have not specified a PMD file.";
            }
   }
   return view(Model);
}

这样你就可以上传文件和数据了,这对你有帮助

【讨论】:

    【解决方案2】:

    尝试使用隐藏字段向控制器发送额外的数据表单。

    @using (Html.BeginForm("UpdateOrder", "Order", FormMethod.Post)) {
          // some inputs here
          <input type="hidden" name="user_info" id="user_info" value="Norway">
    }
    //<p id="user_info">Some text here</p>
    

    OrderController控制器动作方法

    public ActionResult UpdateOrder(String user_info)
    {
    //Hidden filed **name** will be the name of the String
    //From collection can be used in similar way
    }
    

    编辑:您可以通过 jQuery/javascript 更新隐藏字段值,提交后您可以在控制器和文本/图像中获得更新的值,它略有不同

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 2021-04-02
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多