Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
C# 剑道网格自定义添加弹出窗口,控制器Post操作中的值为空_C#_Asp.net Mvc_Razor_Kendo Ui_Kendo Grid - Fatal编程技术网

C# 剑道网格自定义添加弹出窗口,控制器Post操作中的值为空

C# 剑道网格自定义添加弹出窗口,控制器Post操作中的值为空,c#,asp.net-mvc,razor,kendo-ui,kendo-grid,C#,Asp.net Mvc,Razor,Kendo Ui,Kendo Grid,我在使用模板添加/编辑剑道网格时遇到问题。添加/编辑帖子中的对象(ContactEmail)为空,我无法理解为什么ContactID有值。我在KendoUI论坛上查看了对类似问题的回复,但没有找到任何解决我问题的方法 即使没有模板,它也无法工作,因此我的自定义模板似乎没有问题。也没有验证,所以我不明白为什么不能通过。电子邮件基本上只是手机的一个副本,只是更改为使用电子邮件对象 我的视图中有两个剑道网格,下面是其中的一个片段。只有电子邮件有问题: @model DORIS.POCO.Contact

我在使用模板添加/编辑剑道网格时遇到问题。添加/编辑帖子中的对象(ContactEmail)为空,我无法理解为什么ContactID有值。我在KendoUI论坛上查看了对类似问题的回复,但没有找到任何解决我问题的方法

即使没有模板,它也无法工作,因此我的自定义模板似乎没有问题。也没有验证,所以我不明白为什么不能通过。电子邮件基本上只是手机的一个副本,只是更改为使用电子邮件对象

我的视图中有两个剑道网格,下面是其中的一个片段。只有电子邮件有问题:

@model DORIS.POCO.Contact
<div id="phones">
  <h4>Phones</h4>
  <div id="phoneGrid" style="width:500px">
    @(Html.Kendo().Grid<DORIS.POCO.ContactPhone>()
        .Name("kendoContactPhones")
        .Columns(columns =>
        {
            columns.Bound(m => m.Number).Title("Phone").ClientTemplate("#= getFormattedPhone(Number) #");
            columns.Bound(m => m.Category).Title("Type");
            columns.Bound(m => m.DescriptionOf).Title("Description");
            columns.Bound(m => m.PrimaryPhone).Title("Primary").ClientTemplate("<input type='checkbox' disabled='true' #= PrimaryPhone ? checked='checked' :'' # />");
        })
        .Sortable()
        .Selectable(s => s
            .Mode(GridSelectionMode.Single)
            .Type(GridSelectionType.Row)
        )
        .DataSource(d => d
            .Ajax()
            .Model(model => model.Id(m => m.PhoneID))
            .Read(read => read.Action("GetContactPhones", "ContactPhones", new{ id = Model.ContactID }))
            .Create(create => create.Action("KendoPhoneAdd", "ContactPhones", new{ id = Model.ContactID }))
            .Update(update => update.Action("KendoPhoneEdit", "ContactPhones"))
            .Destroy(destroy => destroy.Action("KendoPhoneDelete", "ContactPhones"))
            .Sort(s => s.Add(m => m.PrimaryPhone).Descending())
        )
        .AutoBind(true)
        .ToolBar(toolBar => toolBar.Template("<a id='addPhone' class='k-button k-button-icontext k-grid-add'><span class='k-icon k-add'></span>Add</a><a id='editPhone' class='k-button k-button-icontext k-grid-edit'><span class='k-icon k-edit'></span>Edit</a><a id='deletePhone' class='k-button k-button-icontext k-grid-delete'><span class='k-icon k-delete'></span>Delete</a>"))
        .Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("ContactPhone").Window(w => w.Title("Manage Phone")))
        .Events(e => e.DataBound("toggleBacktoTopButton"))
    )
  </div>
</div>
<div id="emails>">
  <h4>Email</h4>
  <div id="emailGrid" style="width:500px">
    @(Html.Kendo().Grid<DORIS.POCO.ContactEmail>()
        .Name("kendoContactEmails")
        .Columns(columns =>
        {
            columns.Bound(m => m.Email).Title("Email");
            columns.Bound(m => m.DescriptionOf).Title("Description");
            columns.Bound(m => m.PrimaryEmail).Title("Primary").ClientTemplate("<input type='checkbox' disabled='true' #= PrimaryEmail ? checked='checked' :'' # />");
        })
        .Sortable()
        .Selectable(s => s
            .Mode(GridSelectionMode.Single)
            .Type(GridSelectionType.Row)
        )
        .DataSource(d => d
            .Ajax()
            .Model(model => model.Id(m => m.EmailID))
            .Read(read => read.Action("GetContactEmails", "ContactEmails", new{ id = Model.ContactID }))
            .Create(create => create.Action("KendoEmailAdd", "ContactEmails", new{ id = Model.ContactID }))
            .Update(update => update.Action("KendoEmailEdit", "ContactEmails"))
            .Destroy(destroy => destroy.Action("KendoEmailDelete", "ContactEmails"))
            .Sort(s => s.Add(m => m.PrimaryEmail).Descending())
        )
        .AutoBind(true)
        .ToolBar(toolBar => toolBar.Template("<a id='addEmail' class='k-button k-button-icontext k-grid-add'><span class='k-icon k-add'></span>Add</a><a id='editEmail' class='k-button k-button-icontext k-grid-edit'><span class='k-icon k-edit'></span>Edit</a><a id='deleteEmail' class='k-button k-button-icontext k-grid-delete'><span class='k-icon k-delete'></span>Delete</a>"))
        .Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("ContactEmail").Window(w => w.Title("Manage Email")))
        .Events(e => e.DataBound("toggleBacktoTopButton"))
    )
  </div>
这是我的ContactEmail课程:

public partial class ContactEmail
{
    public int EmailID { get; set; }
    public int EntityID { get; set; }
    public string Email { get; set; }
    public string DescriptionOf { get; set; }
    public bool PrimaryEmail { get; set; }

    public virtual Contact Contact { get; set; }
}
最后,这是我的ContactEmail编辑器模板:

@model DORIS.POCO.ContactEmail

@Html.HiddenFor(m => m.EmailID)
@Html.HiddenFor(m => m.EntityID)

<div class="editor-label">
  @Html.LabelFor(m => m.Email)
</div>
<div class="editor-field">
  @Html.EditorFor(m => m.Email )
  @Html.ValidationMessageFor(m => m.Email)
</div>

<div class="editor-label">
  @Html.Label("Description")
</div>
<div class="editor-field">
  @Html.EditorFor(m => m.DescriptionOf)
  @Html.ValidationMessageFor(m => m.DescriptionOf)
</div>

<div class="editor-label">
  @Html.Label("Primary Email")
</div>
<div class="editor-field">
  @Html.CheckBoxFor(m => m.PrimaryEmail)
  @Html.ValidationMessageFor(m => m.PrimaryEmail)
</div>
@model DORIS.POCO.ContactEmail
@Html.HiddenFor(m=>m.EmailID)
@Html.HiddenFor(m=>m.EntityID)
@LabelFor(m=>m.Email)
@EditorFor(m=>m.Email)
@Html.ValidationMessageFor(m=>m.Email)
@Html.Label(“说明”)
@EditorFor(m=>m.DescriptionOf)
@Html.ValidationMessageFor(m=>m.DescriptionOf)
@Html.Label(“主电子邮件”)
@Html.CheckBoxFor(m=>m.PrimaryEmail)
@Html.ValidationMessageFor(m=>m.PrimaryEmail)
我已经研究这个问题很久了,包括在互联网上搜索解决方案。也许我看得太仔细了,答案非常简单

我相信我已经包含了与此问题相关的所有代码,但是如果您认为我遗漏了什么,请告诉我,我会添加它


谢谢!非常感谢您的帮助

您可以检查这个代码库项目,它实现了一个自定义的弹出编辑器:

结果是控制器中我的变量命名有问题。我把帖子改成:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult KendoEmailAdd([DataSourceRequest] DataSourceRequest request, ContactEmail newEmail, int id)
{
  if (newEmail != null)
  {
    ContactEmail email = new ContactEmail();

    email.DescriptionOf = newEmail.DescriptionOf;
    email.Email = newEmail.Email;
    email.EntityID = id;
    email.PrimaryEmail = newEmail.PrimaryEmail;

    db.ContactEmails.Add(email);
    db.SaveChanges();
  }

  return Json(new[] { newEmail }.ToDataSourceResult(request, ModelState));
}

因为我的ContactEmail对象有一个名为“Email”的属性,所以它与我的名为“Email”的变量冲突。

我确实检查了这一点,我使用它作为创建我的变量的指南。不同之处在于,我将“添加/编辑/删除”按钮全部移动到了网格工具栏中,而不是将它们放在每个网格行上。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult KendoEmailAdd([DataSourceRequest] DataSourceRequest request, ContactEmail newEmail, int id)
{
  if (newEmail != null)
  {
    ContactEmail email = new ContactEmail();

    email.DescriptionOf = newEmail.DescriptionOf;
    email.Email = newEmail.Email;
    email.EntityID = id;
    email.PrimaryEmail = newEmail.PrimaryEmail;

    db.ContactEmails.Add(email);
    db.SaveChanges();
  }

  return Json(new[] { newEmail }.ToDataSourceResult(request, ModelState));
}