В настоящее время я создаю мобильный сайт для iPad с помощью jquery mobile и ASP.NET MVC 4. У меня есть две формы в представлении - назовем их FormA и FormB. Каждая форма имеет пользовательские входы и отдельные отправления. Когда FormA отправляется, я хотел бы также отправить FormB. (Тем не менее, обратное не так - когда FormB представляется пользователем, FormA не должен представить - именно поэтому они разделены.)Отправить форму, содержащую входные данные и список <Model> из представления в действие с помощью jquery
Обе формы используют модель, которая выглядит (в части), как это:
public class MyModel
{
[Display(Name = "ID Number:")]
public string idNumber { get; set; }
[Display(Name = "First Name:")]
public string fName { get; set; }
[Display(Name = "Equipment List:")]
public IEnumerable<EquipmentModel> listOfEquipment { get; set; }
}
public class EquipmentModel
{
[Display(Name = "Equipment ID:")]
public string EquipID { get; set; }
[Display(Name = "Equipment Type:")]
public string EquipType { get; set; }
[Display(Name = "Equipment Description:")]
public string EquipDesc { get; set; }
[Display(Name = "Equipment Usage Hours: ")]
public string EquipUsageHours { get; set; }
[Display(Name = "Added By:")]
public string EquipAddedBy { get; set; }
[Display(Name = "Add Date:")]
public string EquipAddDate { get; set; }
[Display(Name = "Costkey:")]
public string EquipCostKey { get; set; }
}
FormB выглядит следующим образом (в основном показывает список оборудования и связанных с ними часов использования для каждой части оборудования пользователя разрешено корректировать часы для каждой единицы оборудования путем перемещения ползунка.):
@using (Html.BeginForm("ActionBName", "ControllerName", FormMethod.Post, new { id = "FormB" }))
{
@Html.ValidationSummary(true)
<input type="hidden" name="idNumber" value="@Model.idNumber">
<input type="hidden" name="fName" value="@Model.fName">
if (Model.listOfEquipment != null)
{
int i = 0;
foreach (var liEquipModel in Model.listOfEquipment)
{
<input type="hidden" name="[@i].EquipID" value="@liEquipModel.EquipID">
<input type="hidden" name="[@i].EquipType" value="@liEquipModel.EquipType">
<input type="hidden" name="[@i].EquipDesc" value="@liEquipModel.EquipDesc">
<input type="hidden" name="[@i].EquipAddedBy" value="@liEquipModel.EquipAddedBy">
<input type="hidden" name="[@i].EquipAddDate" value="@liEquipModel.EquipAddDate">
<input type="hidden" name="[@i].EquipCostKey" value="@liEquipModel.EquipCostKey">
DateTime eqAddDateTime = Convert.ToDateTime(liEquipModel.EquipAddDate);
string eqAddDate = eqAddDateTime.ToString("d");
string eqAddTime = eqAddDateTime.ToString("t");
<ul data-role="listview" data-inset="true" data-theme="c" style="margin-top:5px;">
<li data-role="list-divider">
@woEquipModel.EquipDesc
<span style="float:right;">
Equipment ID: <span>@liEquipModel.EquipID</span>
</span>
</li>
<li>
<span style="font-size: 12px; font-weight:bold; color:#474747;">
<span style="color:#29537E;">Hours: </span>
</span>
<span class="ui-li-aside" style="float:right; width:92%; text-align:left; margin-top:-14px;">
<span style="font-size: 14px; font-weight:bold; color:#474747;">
<input type="range"
data-theme="c"
name="[@i].EquipUsageHours"
id="slider-1"
style="font-size: 12px; color:#474747; margin-top:0px;"
value="@liEquipModel.EquipUsageHours" min="0" max="16" step=".25"
data-highlight="true"
/>
</span>
</span>
</li>
</ul>
i += 1;
}
<div class="ui-grid-solo">
<div class="ui-block-a" style="float:right; width:30%;">
<input id="btnSaveEquipHours2" data-mini="true" data-theme="b" type="submit" value="Save Hours" />
</div>
</div>
}
}
Действие, которое я отправляю FormB, является следующим: :
[HttpPost]
public ActionResult ActionBName (string idNumber, string fName, List<EquipmentModel> equipList)
{
//do work to save to database
}
Теперь, когда пользователь отправляет FormA, мне необходимо эффективно отправить FormB. Сложная часть для меня - это список оборудования, которое является свойством модели, которое является списком другой модели.
Как это сделать? Я пробовал следующий JQuery:
$(function() {
$('#FormA').submit(function() {
$.post('@Url.Action("ActionBName", "ControllerName")', $("#FormB").serialize())
});
});
Это работает на моем рабочем столе в Safari и Chrome, но не работает на IPad.
У кого-нибудь есть идеи? Любая помощь приветствуется. Благодарю.
Это решило проблему. Хороший звонок. Спасибо @ AnthonyChu. – user2163572