Jquery 如何从单击按钮渲染的局部视图将recordId传递给模型构造函数
我有一个呈现记录列表的视图。其中一列是ID(SynchronizationID)。另一项是具有动态生成的ID的按钮,该ID包括与ID列连接的“btnUpdate”。它工作得很好 以下是将列表呈现为网格的视图部分:Jquery 如何从单击按钮渲染的局部视图将recordId传递给模型构造函数,jquery,asp.net-mvc,razor,Jquery,Asp.net Mvc,Razor,我有一个呈现记录列表的视图。其中一列是ID(SynchronizationID)。另一项是具有动态生成的ID的按钮,该ID包括与ID列连接的“btnUpdate”。它工作得很好 以下是将列表呈现为网格的视图部分: @foreach (var item in Model.PendingSynchronizations) { <tr> <td> @item.SynchronizationID </td>
@foreach (var item in Model.PendingSynchronizations)
{
<tr>
<td>
@item.SynchronizationID
</td>
<td>
@item.CustomerName
</td>
<td>
@item.ProductName
</td>
<td>
@String.Format("{0:g}", item.LastProcessedDate)
</td>
<td>
@item.OLAPServer
</td>
<td>
@item.OLAPDatabase
</td>
<td>
<input id="@String.Format("btnUpdate{0}",item.SynchronizationID.ToString())" type="submit" value="@String.Format("{0}", (item.ApprovedFlag) ? "Reject" : "Approve")" synchId="@item.SynchronizationID.ToString()"/>
</td>
<td>
@item.ApprovedSynchDate
</td>
</tr>
}
模式呈现一个局部视图,其中包含一个必填字段,一个日期,该字段也可以正常工作。但是,当我输入日期并单击Accept按钮时,控制器会将模型传递回构造函数,并填充日期字段(这是通过对控制器的该日期字段调用SET()方法实现的。但我需要更新的id字段始终为0
以下是局部视图:
@model CubeBuilder.Site.Models.ProductionSynchDateModel
@using (Html.BeginForm("ToggleApprove", "Synchronization", new { id = Model.SynchronizationId }, FormMethod.Post))
{
@Html.LabelFor(model => model.SynchronizationId);
@Html.DisplayFor(model => model.SynchronizationId);
@Html.LabelFor(model => model.SyncDate);
@Html.TextBoxFor(model => model.SyncDate, new { @class = "datepicker" })
}
<script type="text/javascript">
$(document).ready(function () {
$(".datepicker").datepicker();
});
</script>
<div id="approve-synch">
@using (Ajax.BeginForm("ToggleApprove", "Synchronization", new AjaxOptions() {
OnFailure = "updateSynchFailed",
OnSuccess = "updateComplete",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "approve-synch-form" },
new { id = "approveSynchForm" }))
{
<div id="approve-synch-form">
@Html.Partial("ApproveSynch", new CubeBuilder.Site.Models.ProductionSynchDateModel())
</div>
}
</div>
最后,在我的submit button处理程序的模型中为它工作的模式中的submit button设置属性值:
$('#SynchronizationId').val($('#CurrentSynchId').val());
以下是局部视图的模型,有助于:
public class ProductionSynchDateModel
{
public short SynchronizationId { get; set; }
public Synchronization synchInstance { get; set; }
private SynchronizationManager synchManager { get; set; }
public bool Approved
{
get;
set;
}
[Required]
[Display(Name = "Production Sync Date")]
public DateTime? Schedule
{
get;
set;
}
[Display(Name = "Production Sync Date")]
public string SyncDate
{
get
{
if (Schedule.HasValue)
return Schedule.Value.ToShortDateString();
return string.Empty;
}
set
{
Schedule = Convert.ToDateTime(value);
}
}
public ProductionSynchDateModel()
{
}
public ProductionSynchDateModel(short id)
{
var db = EntityContext.New;
SynchronizationId = id;
synchManager = new SynchronizationManager(db);
synchInstance = synchManager[SynchronizationId];
}
}
再说一次,任何帮助都会很好。我觉得我只是偶然发现了一些在这里可以工作的东西,我不知道为什么。如果我从partal视图中删除EditorFor()helper调用,它就不起作用了
再次更新:Nevermind。我找到了答案,也明白了原因。我将EditorFor()助手更改为HiddenFor(),这会导致字段从视图推送到局部视图,并保存到局部视图的模型中。一切正常
我希望其他有同样问题的人也能从中获得一些启发。这基本上是一种使用按钮和modals制作网格的方法,效果很好。它对我很有效
@Html.HiddenFor(model=>model.SynchronizationId)
$('#SynchronizationId').val($('#CurrentSynchId').val());
public class ProductionSynchDateModel
{
public short SynchronizationId { get; set; }
public Synchronization synchInstance { get; set; }
private SynchronizationManager synchManager { get; set; }
public bool Approved
{
get;
set;
}
[Required]
[Display(Name = "Production Sync Date")]
public DateTime? Schedule
{
get;
set;
}
[Display(Name = "Production Sync Date")]
public string SyncDate
{
get
{
if (Schedule.HasValue)
return Schedule.Value.ToShortDateString();
return string.Empty;
}
set
{
Schedule = Convert.ToDateTime(value);
}
}
public ProductionSynchDateModel()
{
}
public ProductionSynchDateModel(short id)
{
var db = EntityContext.New;
SynchronizationId = id;
synchManager = new SynchronizationManager(db);
synchInstance = synchManager[SynchronizationId];
}
}