数据绑定:'System.String'不包含名为 'numeroGuia' 的属性



我是 ASP.net MVC5的新手,我的问题是这样的:

我正在创建一个部分视图"AgregaGuia",其中我向尚未具有"fechaRecepcionGuia"的行的TblGuias模型进行查询,这些指南填充在组合框中,选择此选项时,指南将填充该视图中的所有文本框。但是,在运行应用程序时,它生成了以下错误: 数据绑定:"System.String"不包含名为"numeroGuia"的属性。

谁能帮我??

这是我的模型:

    public partial class TblGuias
    {
        public TblGuias()
        {
            this.TblFactIC = new HashSet<TblFactIC>();
        }
        public string numeroGuia { get; set; }
        public string companiaEnvios { get; set; }
        public string destino { get; set; }
        public decimal pesoGuia { get; set; }
        public System.DateTime fechaEnvioGuia { get; set; }
        public Nullable<System.DateTime> fechaRecepcionGuia { get; set; }
        public string comprobante { get; set; }
        public virtual ICollection<TblFactIC> TblFactIC { get; set; }
    }

这是我的控制器:

public class vueInveEntrsController : Controller
{
    public ActionResult AgregaGuia()
    {
        ViewData["guia"] = new SelectList(db.TblGuias.Where(g => g.fechaRecepcionGuia == null).Select((g => g.numeroGuia)),"numeroGuia", "companiaEnvios","destino","pesoGuia","fechaEnvioGuia");
        return PartialView(db.TblGuias.ToList());
    }
    [HttpPost]
    public ActionResult Action(string numero)
    {
        var query = from c in db.TblGuias
                    where c.numeroGuia == numero
                    select c;
        return Json(query);
    }
}

我的观点如下:

@using (@Html.BeginForm("Action", "vueInveEntrs", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <div class="form-group">
        @Html.Label("Seleccione Guia", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("numero", (SelectList)ViewData["guia"], new { onchange = "Action(this.value);", @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.Label("Compañia Envios", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBox("transporte", null, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.Label("Destino", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBox("destino", null, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.Label("Peso", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBox("peso", null, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.Label("Fecha Envio", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.TextBox("fechaenvio", null, new { @class = "form-control" })
        </div>
    </div>
}

<script type="text/javascript">
    function Action(numero) {
        $.ajax({
            url: '@Url.Action("Action", "vueInveEntrs")',
            type: "POST",
            data: { "numero": numero },
            "success": function (data) {
                if (data != null) {
                    var vdata = data;
                    $("#transporte").val(vdata[0].companiaEnvios);
                    $("#destino").val(vdata[0].destino);
                    $("#peso").val(vdata[0].pesoGuia);
                    $("#fechaenvio").val(vdata[0].fechaEnvioGuia);
                }
            }
        });
    }
</script>

问题是控制器中的这一行:

ViewData["guia"] = new SelectList(
        db.TblGuias.Where(g => g.fechaRecepcionGuia == null).Select((g => g.numeroGuia)),
        "numeroGuia", "companiaEnvios","destino","pesoGuia","fechaEnvioGuia");

您没有正确指定SelectList的构造函数参数。 有几种不同的重载,但我认为您想要的是这个:

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField
)
  • 第一个参数 items 表示要呈现到<select>内的<option>标记中的项目列表。
  • 第二个参数 dataValueField 是可枚举项的属性名称,该属性将成为每个<option>标记内的value属性。
  • 同样,第三个参数 dataTextField 是属性的名称,它将成为为每个<option>显示的文本。

因此,如果您将代码更改为以下内容,我认为它应该可以工作:

ViewData["guia"] = new SelectList(
    db.TblGuias.Where(g => g.fechaRecepcionGuia == null), "numeroGuia", "numeroGuia");

如果要在下拉列表中显示不同的文本,请将第三个参数更改为与TblGuias类不同的属性。

相关内容

  • 没有找到相关文章

最新更新