Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何从单击按钮渲染的局部视图将recordId传递给模型构造函数_Jquery_Asp.net Mvc_Razor - Fatal编程技术网

Jquery 如何从单击按钮渲染的局部视图将recordId传递给模型构造函数

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>

我有一个呈现记录列表的视图。其中一列是ID(SynchronizationID)。另一项是具有动态生成的ID的按钮,该ID包括与ID列连接的“btnUpdate”。它工作得很好

以下是将列表呈现为网格的视图部分:

@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];
    }
}