@model DemoRicerca_Interno.Models.RicercaClienteObject
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<
div
>
<
div
id
=
"ricerca"
></
div
>
<
div
>Query : @Html.EditorFor(x => x.Query)</
div
>
<
div
>Match Exact : @Html.EditorFor(x => x.MatchExact)</
div
>
<
div
>AncheEstinti : @Html.EditorFor(x => x.AncheEstinti)</
div
>
<
button
id
=
"showGrid"
>Carica</
button
><
br
/>
<
script
type
=
"text/javascript"
>
$("#showGrid").click(function () {
$("#grid").data("kendoGrid").dataSource.read();
});
</
script
>
<
div
id
=
"content"
>
@(Html.Kendo()
.Grid<
DemoRicerca_Interno.Models.Rapporto
>()
.AutoBind(false)
.Name("grid")
.Columns(columns =>
{
columns.Bound(x => x.IDInterno).Visible(false);
columns.Bound(x => x.IDRapporto);
columns.Bound(x => x.Descr);
columns.Bound(x => x.Filiale);
columns.Bound(x => x.RM);
columns.Bound(x => x.NDG);
})
.DataSource(ds => ds
.Ajax()
.Read(read =>
{
read.Action("GetClienti", "Ricerca");
//new DemoRicerca_Interno.Models.RicercaClienteObject { Query = Model.Query, MatchExact = Model.MatchExact, AncheEstinti = Model.AncheEstinti });
}
)
)
)
</
div
>
</
div
>
public
class
RicercaController : Controller
{
public
ActionResult Index()
{
ViewData.Model =
new
RicercaClienteObject();
return
View();
}
public
ActionResult GetClienti([DataSourceRequest] DataSourceRequest request, RicercaClienteObject ricerca)
{
xxxEntities model =
new
xxxEntities();
var res = model_SP_GET_INTESTATARIO(xxx, ricerca.Query, ricerca.MatchExact, xxx, DateTime.Now.AddDays(-1), 0, ricerca.AncheEstinti,
null
,
null
);
List<Rapporto> lst =
new
List<Rapporto>();
foreach
(var item
in
res)
{
var rapporto =
new
Rapporto();
rapporto.Descr = item.INTESTAZIONE.Trim();
rapporto.Filiale = item.FILIALE.Trim();
rapporto.IDRapporto = item.CODICE_RAPPORTO.Trim();
rapporto.NDG = item.NDG.Trim();
rapporto.RM = item.RM.Trim();
rapporto.IDInterno = item.ID_RAPPORTO;
lst.Add(rapporto);
}
var result = lst.ToDataSourceResult(request);
return
Json(result);
}
}
public
class
RicercaClienteObject
{
[DataType( System.ComponentModel.DataAnnotations.DataType.Text)]
public
string
Query {
get
;
set
; }
public
int
AncheEstinti {
get
;
set
; }
public
int
MatchExact {
get
;
set
; }
}
public
class
Rapporto
{
public
string
IDRapporto {
get
;
set
; }
public
string
Descr {
get
;
set
; }
public
int
? IDInterno {
get
;
set
; }
public
string
Filiale {
get
;
set
; }
public
string
RM {
get
;
set
; }
public
string
StatoRapporto {
get
;
set
; }
public
string
NDG {
get
;
set
; }
public
string
Servizio {
get
;
set
; }
public
int
? IDCliente {
get
;
set
; }
}
@(Html.Kendo().Grid<
Contact
>()
.Name("ContactGrid")
.Columns(columns =>
{
columns.Bound(x => x.LastName).Title("Last Name");
columns.Bound(x => x.FirstName).Title("First Name");
columns.Command(command => { command.Edit(); command.Destroy(); }).Title("Actions").Width(200);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(100)
.Model(model => model.Id(p => p.Id))
.Read("_Read", "Clients")
.Update("_Update", "Clients")
.Create("_Create", "Clients")
.Destroy("_Destroy", "Clients")
)
.ToolBar(toolbar => toolbar.Create().Text("Add New Client"))
.Editable(editable => editable.Mode(GridEditMode.PopUp).DisplayDeleteConfirmation(true))
.Sortable()
.Scrollable(scrollable => scrollable.Virtual(true).Height(280))
.Events(events => events.Edit("edit"))
)
<
div
class
=
"mvceditor-label"
>
@Html.LabelFor(x => x.State)
</
div
>
<
div
class
=
"mvceditor-field"
>
@Html.Kendo().DropDownListFor(x => x.State).BindTo(new SelectList(@ViewBag.States, "Abbreviation", "Name"))
</
div
>
<
div
class
=
"mvceditor-label"
>
@Html.LabelFor(x => x.LabId)
</
div
>
<
div
class
=
"mvceditor-field"
>
@Html.DropDownListFor(x => x.LabId, new SelectList(@ViewBag.Labs, "Id", "Description"))
</
div
>
<
div
class
=
"mvceditor-label"
>
@Html.LabelFor(x => x.TierId)
</
div
>
<
div
class
=
"mvceditor-field"
>
@Html.Kendo().DropDownListFor(x => x.TierId).BindTo(new SelectList(@ViewBag.Tiers, "Id", "Description"))
@Html.ValidationMessageFor(x => x.TierId)
</
div
>
public class Contact
{
public int? Id { get; set; }
[Required(ErrorMessage="Required")]
[DisplayName("First Name *")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Required")]
[DisplayName("Last Name *")]
public string LastName { get; set; }
[Required(ErrorMessage = "Required")]
[DisplayName("User Tier *")]
public int? TierId { get; set; }
public string State { get; set; }
[DisplayName("Default Lab")]
public int? LabId { get; set; }
public string LastUpdateBy { get; set; }
}
public ActionResult Index()
{
SetupLists();
return View();
}
public ActionResult _Read([DataSourceRequest] DataSourceRequest request)
{
return Json(contactsService.Get().ToDataSourceResult(request));
}
[HttpPost]
public ActionResult _Create([DataSourceRequest] DataSourceRequest request, Contact contact)
{
if (ModelState.IsValid)
{
contact.LastUpdateBy = User.Identity.Name;
contactsService.Create(contact);
}
return Json(new[] { contact }.ToDataSourceResult(request, ModelState));
}
[HttpPost]
public ActionResult _Update([DataSourceRequest] DataSourceRequest request, Contact contact)
{
if (ModelState.IsValid)
{
contact.LastUpdateBy = User.Identity.Name;
contactsService.Update(contact);
}
return Json(new[] { contact }.ToDataSourceResult(request, ModelState));
}
private void SetupLists()
{
IList<
Lab
> labs = labsService.Get();
labs.Insert(0, new Lab { Description = "" });
IList<
Tier
> tiers = tiersService.Get();
tiers.Insert(0, new Tier { Description = "" });
IList<
Institution
> institutions = institutionsService.Get();
institutions.Insert(0, new Institution { Description = "" });
IList<
Contact
> contacts = contactsService.Get();
contacts.Insert(0, new Contact { FullName = "" });
IList<
Grant
> grants = grantsService.Get();
grants.Insert(0, new Grant { Description = "" });
IList<
State
> states = statesService.Get();
states.Insert(0, new State { Name = "" });
ViewBag.Labs = labs;
ViewBag.Tiers = tiers;
ViewBag.Institutions = institutions;
ViewBag.Contacts = contacts;
ViewBag.Grants = grants;
ViewBag.States = states;
}
I am using a master detail grid in Ajax mode with a client grid in a client template. If I don't include the client template, everything is fine. When I do include the client template, I get a syntax error for every line in the master grid. The syntax error is the ImageId (the model id) of the master grid. I can see no reference to it anywhere in the runtime code.
A second, somewhat related question is how do I reference items in the client grid? For instance when I am creating the client grid in the template, I can get the value of the ImageId from the master grid using "#=ImageId#'. However, if I try to reference the fields of the client grid data structure the same way I get an error saying it can't find the field. I am assuming this is because it is looking in the master grid data structure. How do I reference the client data structure's fields?
Thank you,
Kerry
The aspx is included below:
01.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<
int
?>" %>
02.
<%@ Import Namespace="WellsFargo.NewsPub.Web.UI.Areas.Attachment.Models" %>
03.
<%
04.
var workflowUrl = Url.Content("~/" + Constants.Areas.Attachment + "/" + Constants.Controllers.Image + "/" + Constants.ImageController.ExecuteImageWorkflowCommand);
05.
%>
06.
<% Html.Kendo().Grid<
ImageModel
>()
07.
.Name("PublicationImagesGrid")
08.
.DataSource(dataSource => dataSource
09.
.Ajax()
10.
.Model(model => model.Id(i => i.ImageId))
11.
.Read(Constants.ImageController.ReadPublicationImages, Constants.Controllers.Image, new { publicationId = Model })
12.
.Destroy(destroy => destroy.Action(Constants.ImageController.DeleteImage, Constants.Controllers.Image))
13.
)
14.
.HtmlAttributes(new { @class = "image-grid" })
15.
.Columns(columns =>
16.
{
17.
columns.Bound(pub => pub.PublicationId).Hidden(true);
18.
columns.Bound(pub => pub.ImageId);
19.
columns.Bound(c => c.Thumbnail)
20.
.Title("Thumbnail")
21.
.Width(1)
22.
.ClientTemplate("<
img
src
=
'#= ThumbnailSrc #" + "'
alt
=
'#= Tag #'
/>");
23.
columns.Bound(pub => pub.ImageSortOrder).Title("Sort Order");
24.
columns.Bound(c => c.FileName)
25.
.Title("File Name")
26.
.Width(1);
27.
columns.Bound(c => c.Dimensions)
28.
.Width(1);
29.
columns.Bound(c => c.Tag);
30.
columns.Bound(c => c.Caption);
31.
columns.Bound(c => c.ImageId)
32.
.ClientTemplate("#= get_image_approval_control('"
33.
+ workflowUrl
34.
+ "', ImageId, 1, '"
35.
+ Constants.ImageController.ReadPublicationImages + "', "
36.
+ (int)DataConstants.ImageStatus.Approved + ", "
37.
+ (int)DataConstants.ImageStatus.Rejected + ", "
38.
+ (int)DataConstants.ImageStatus.ApprovalRequired + ") #")
39.
.Width(150)
40.
.Title("Status");
41.
columns.Command(command => command.Destroy());
42.
columns.Bound(c => c.Height).Hidden(true);
43.
})
44.
.ClientDetailTemplateId("child-image-template")
45.
.ToolBar(toolbar => toolbar.Template(() =>
46.
{ %> <
a
onclick='create_image(<%= Model %>)' class='k-button'>Add New Image</
a
> <% }))
47.
.Events(e => e
48.
.DataBound("image_grid_data_bound")
49.
)
50.
.Render();
51.
%>
52.
53.
<
script
id
=
"child-image-template"
type
=
"text/x-kendo-template"
>
54.
<%= Html.Kendo().Grid<
ChildImageDto
>()
55.
.Name("ChildImages_#=ImageId#")
56.
.DataSource(ds => ds.Ajax().Read(Constants.ImageController.ReadChildImages, Constants.Controllers.Image, new {parentImageIdStr = "#=ImageId#"}))
57.
.Columns(col => {
58.
col.Bound(i => i.ChildImageId);
59.
col.Bound(i => i.MimeType);
60.
col.Bound(i => i.Dimensions);
61.
col.Bound(i => i.BinarySrc).ClientTemplate("<
img
src
=
'#=BinarySrc#'
alt
=
'#=Tag#'
/>");
62.
})
63.
.ToClientTemplate() %>
64.
</
script
>