繁体   English   中英

如何通过单击编辑按钮在 mvc4 devExpress 中使用 SetDataItemTemplateContent 将参数从 gridview 传递到 controller?

[英]How to pass Parameter from gridview to controller using SetDataItemTemplateContent in mvc4 devExpress by clicking Edit Button?

您好,我有一个注册页面,它包含名为 UID、用户名、密码的字段。 我正在使用 dev Express gridview。当我单击编辑按钮时,它需要将特定的行键值传递给 controller,但它会将 null 参数传递给 controller。现在我想要的是通过单击将特定的行键参数传递给 controller使用 SetDataItemTemplateContent 在 mvc dev express gridview 中的网格视图中编辑按钮。下面我发布我的代码,请任何人更正我的代码并告诉我我犯了什么错误。

我的 Model (UserMasterViewModel)

 public int UID{get;set;}
 public string UserName{get;set;}
 public string Password{get;set;}

我的 Controller 密码

Public ActionResult UserMasterEdit(int? id)
{
 View_MUsrRegistration  userregistrartion = db.MUsrRegistration.Find(id)
 UserMasterViewModel usermasterviewmodel = new UserMasterViewModel();

  usermasterviewmodel.UserName = userregistrartion.UserName;
  usermasterviewmodel.Password = userregistrartion.Password; 
  return View(usermasterviewmodel)
}

网格视图代码

@Html.DevExpress().GridView(
  settings =>
   {
    settings.Name = "gvEditing";
    settings.KeyFieldName = "UID";
    settings.CallbackRouteValues = new { Controller = "UserMaster", Action = "UserMasterPartial" };
    settings.Width = Unit.Percentage(100);

    settings.Columns.Add(column => {
        column.Caption = "#";
        column.SetDataItemTemplateContent(c =>
        {
            ViewContext.Writer.Write(
                Html.ActionLink("Edit", "UserMasterEdit", new { UID = DataBinder.Eval(c.DataItem, "UID") }) + " " +
                Html.ActionLink("Delete", "UserMasterDelete", new { ProductID = DataBinder.Eval(c.DataItem, "UID") },
                    new { onclick = "return confirm('Do you really want to delete this record?')" })
            );
        });

        column.Settings.AllowDragDrop = DefaultBoolean.False;
        column.Settings.AllowSort = DefaultBoolean.False;
        column.Width = 70;
    });
    settings.Columns.Add("UserName");
    settings.Columns.Add("Password");
    settings.ClientLayout = (s, e) =>
    {
        if(e.LayoutMode == ClientLayoutMode.Loading) {
            if(Session["GridState"] != null)
                e.LayoutData = (string)Session["GridState"];
        }
        else
            Session["GridState"] = e.LayoutData;
    };
}).Bind(Model).GetHtml()

编辑视图

@model MSSERP.Models.UserMasterViewModel
 @{
  Html.EnableClientValidation(); 
}

 @using(Html.BeginForm("UserMaterUpdate", "UserMaster", FormMethod.Post, new { @class = "edit_form" })) {
@Html.HiddenFor(m=>m.UID)
<div class="line">
   @Html.Label(UserNmae)
   @Html.TextBoxFor(m=>m.UserName)
</div>

<div class="line">
   @Html.Label(Password)
   @Html.TextBoxFor(m=>m.Password)
</div>
<div class ="line">
<input type="submit" value ="Save"/>
</div>

在此我单击编辑按钮,它将 null 值传递给 controller。我尝试了很多方法但无法将 UID 参数传递给 controller。我不知道我在这个操作中犯了什么错误。 我尽力解释这个问题任何人都理解并帮助我解决这个问题。

谢谢..

尝试以下”

更改:

Html.ActionLink("Edit", "UserMasterEdit", new { UID = DataBinder.Eval(c.DataItem, "UID") }) 

至:

Html.ActionLink("Edit", "UserMasterEdit", new { id = DataBinder.Eval(c.DataItem, "UID") }, null) 

参数名称应与控制器的参数名称匹配。 需要添加null参数以确保调用正确的解析方法。 看到这个链接: HTML.ActionLink方法

在您的 DisplayFor 所在的 GridView 中:

<a class="ml-2" href="/Merchant/Merchant_Boarding/@Html.DisplayFor(modelItem => item.GUID)" title="Edit">Edit</a>

或者使用 ActionLink:

@Html.ActionLink("Edit", "Merchant_Boarding", new { id = (item.GUID) }, new { @class = "ml-2" })

在您的获取中:

        [HttpGet]
    public IActionResult Merchant_Boarding(string? id)
    {
        var model = new MerchantDetail();
        MerchantData merchdata = new MerchantData();

        model = merchdata.RetrieveMerchantData(id);
        merchdata.Dispose();
        return View(model);
    }

id 变量将包含您从网格视图传入的值。 从那里,您可以填充您的 model 并显示它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM