通过POST方法在asp.net中的视图之间传递数据

时间:2013-12-17 18:31:19

标签: asp.net asp.net-mvc

我在特定视图页面(从用户收集)中有数据,我需要将其发送到另一个具有需要此数据的表单的视图页面。现在我可以使用: -
1.发布javascript方法(jquery)

$().redirect('/Events/Create', {'arg1': 'value1', 'arg2': 'value2'});

  1. 表格: -
  2.   

    $('#inset_form')。html('< form action =“/ Events / Create”   方法= “POST” 风格= “显示:无;” >< input type =“text”name =“lat”   value =“'+ latitude +'”/>< /形式>');

         

    document.forms [ '投票']提交();

    现在我的问题是,应该选择哪种方法?

    此外,'/ Events / Create'页面的格式如下: -

    @using (Html.BeginForm()) {
      @Html.AntiForgeryToken()
      @Html.ValidationSummary(true)
      <div class="editor-label">
           @Html.LabelFor(model => model.lat)
      </div>
       <div class="editor-field">
            @Html.EditorFor(model => model.lat)---------> THIS field accepts the POSTed data
            @Html.ValidationMessageFor(model => model.lat)
       </div>
    
       <div>
           ....OTHER INPUT FIELDS.....
       </div>
    
       <p>
            <input type="submit" value="Create" />
        </p>
    }
    

    所以,我的下一个问题是如何使@Html.EditorFor创建的文本框'lat'在表单中显示POSTed数据作为其默认值。然后,用户可以填写其他字段,然后提交表单。

2 个答案:

答案 0 :(得分:0)

根据HTTP标准,如果呼叫未改变网站状态(即数据),则应使用GET请求。这意味着您应该为用户提供一个链接,其中包含正确的查询字符串,以填充/ Events / Create页面上的表单。

另外,请记住,您永远不会将数据从视图发送到MVC中的视图。一切都通过控制器操作,因此请确保“事件”控制器上的“创建”操作接受填充表单以提交的正确参数。如果Model.lat变量在渲染视图时具有值,则文本框将预先填充该值。

答案 1 :(得分:0)

为什么要将数据发布到第二个表单?如果要显示表单并使用默认值加载它,请为其创建GET操作方法并传递URL中的默认值。虽然没有什么可以阻止你为同一个视图使用两个POST方法,但通常的方法是使用GET加载表单,然后在编辑后POST回数据。

 [HttpGet]
 public ActionResult Create(string lat)
 {
     MyView view = new MyView();
     view.lat = lat;
     View(view);
 }

 [HttpPost]
 public ActionResult Create(MyView view)
 {
     //process posted data after editing
 }

此处的视图对象是一个ViewModel类,其中包含您将在表单上编辑的数据的属性。使您的View强烈键入此ViewModel类型。

从jQuery(上面)调用GET方法:

window.location = "Events/Create?lat=myValue";