1

我是 MVC 新手,在我的项目中使用剑道 ui 网格。我提出了一个问题,即我在控制器参数中得到“null”,尽管数据正在通过视图传递。请看下面的代码。

这是我查看的代码部分

@model IEnumerable<WeBOC.Support.Entities.Vessel>

@{
ViewBag.Title = "Vessels";
}

<h2>Vessels</h2>
@(Html.Kendo().Grid(Model)
    .Name("Grid")
.Columns(column =>
    {
        column.Bound(c => c.VIRNbr).Width(100).ClientTemplate(@Html.ActionLink("#=VIRNbr#", "VesselInspector", new { id = "#=VesselVisitId#" }).ToHtmlString()).Title("VIR No.").Width(150);
        column.Bound(c => c.VesselName).Width(150).Title("Vessel Name");
        column.Bound(c => c.InboundVoyageNbr).Width(70).Title("IB Vyg");
        column.Bound(c => c.OutboundVoyageNbr).Width(70).Title("OB Vyg");
        column.Bound(c => c.ETA).Width(100).Title("ETA").Format("{0:dd/MM/yyyy HH:mm}");
        column.Bound(c => c.ArrivalDate).Width(100).Title("ATA").Format("{0:dd/MM/yyyy HH:mm}");
    })
    .Groupable()
    .Sortable()
    .Pageable()
    .Filterable()
    .DataSource(datasource => datasource
        .Ajax()
        .ServerOperation(true)
        .PageSize(20)
        .Read(read => read
            .Action("Vessels_Read", "VesselVisit", new { id = "\\#=State\\#"})
            ))
)

这是控制器方法

public ActionResult Vessels_Read([DataSourceRequest] DataSourceRequest request, string id)
    {
        return Json(GetVessels(id).ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
    }

为什么我在参数 id 中得到 null 虽然通过视图传递。

public ActionResult Vessels(string id)
    {
        return View(GetVessels(id));
    }

    public IEnumerable<Vessel> GetVessels(string phase)
    {
        IEnumerable<Vessel> vsl = null;
        vsl = this._repository.GetVesselByPhase(phase);            
        return vsl;
    }

任何帮助将不胜感激。

谢谢, 奥维斯

4

1 回答 1

0

如果您想将其他参数传递给您的操作,您应该执行以下操作:

.DataSource( dataSource => dataSource
    .Ajax()
    .Read( "Vessels_Read", "VesselVisit" ).Data("getState") //getState is a javascript function
)

然后添加一个脚本块:

<script>
function getState() {
    return {
        ID: // your ID, obtained with jQuery, from the View Model, hardcoded, etc...
    };
}
</script>

更多信息在这里

编辑

我现在有这个工作。我正在使用视图模型,但应该没有什么不同。

看法:

.DataSource( dataSource => dataSource
    .Ajax()
    .Read( "MY_ACTION", "MY_CONTROLLER", new { Id = Model.Id } )
)

控制器:

[HttpPost]
public ActionResult MY_ACTION( [DataSourceRequest] DataSourceRequest request, long Id )

即使我将操作参数更改new { Id = Model.Id }new { Id = "QWERTY" }字符串,我也会收到"QUERTY"值。

于 2013-09-26T11:19:40.380 回答