通过视图传递时,mvc控制器中的数据显示为null

时间:2013-09-26 09:51:25

标签: asp.net-mvc-3 kendo-ui asp.net-ajax kendo-grid

我是MVC的新手,在我的项目中使用了kendo ui网格。我提出了一个我得到的问题" null"在控制器参数中,尽管数据正在通过视图。请参阅以下代码。

以下是我在View

中的代码部分
@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;
    }

任何帮助将不胜感激。

谢谢, Ovais

1 个答案:

答案 0 :(得分: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>

更多信息here

修改

我现在有这个工作。我正在使用View Model,但它应该没有任何不同。

查看:

.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"作为值。