我在特定视图页面(从用户收集)中有数据,我需要将其发送到另一个具有需要此数据的表单的视图页面。现在我可以使用: -
1.发布javascript方法(jquery)
$().redirect('/Events/Create', {'arg1': 'value1', 'arg2': 'value2'});
或
$('#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数据作为其默认值。然后,用户可以填写其他字段,然后提交表单。
答案 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";