Immer Fehler Einen optionalen parameter müssen Sie einen Verweis geben, eine nullable-Typ, oder erklärt werden als optionale parameter

Erste Fehler nach dem Update die Daten in die Datenbank

Die Parameter-dictionary enthält einen null-Eintrag für den parameter 'id' nicht-nullable-Typ 'System.Int32' für die Methode 'System.Web.Mvc.ActionResult UpdateChain(Int32, HCIBE.Modelle.Kette)' in 'HCIBE.Controller.ChainsController'. Einen optionalen parameter müssen Sie einen Verweis geben, eine nullable-Typ, oder erklärt werden als optionale parameter.

Hier ist Mein Controller

    [HttpGet]
    public ActionResult UpdateChain(int? id)
    {
        chain objchain = db.chains.Find(id);
        if (objchain == null)
        {
            return HttpNotFound();
        }
        return View(objchain);
    }

    [HttpPost]
    public ActionResult UpdateChain(int id, [Bind(Include = "name,code,username,password,updated_by,updated_on")] chain chain)
    {
        chain _objchain = db.chains.Find(id);
        try
        {
        if(ModelState.IsValid)
        {
            _objchain.code = chain.code;
            _objchain.name = chain.name;
            _objchain.username = chain.username;
            _objchain.password = chain.password;
            _objchain.updated_by = Convert.ToInt32("1");
            _objchain.updated_on = DateTime.Now;

            db.Entry(_objchain).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        }
        catch (Exception Ex)
        {
            ModelState.AddModelError("", "Unable to update data");
        }
        return View(_objchain);
    }

Ansicht

@using (@Html.BeginForm("UpdateChain", "Chains", FormMethod.Post))
{

<div class="form-horizontal">
    <hr />
    <div class="form-group">
        <label class="col-sm-2 control-label">
            Select Chain
        </label>
        <div class="col-md-3">
            @Html.DropDownList("ddlchainname", (SelectList)ViewData["chain_name"],"Select Chain", new { onchange = "Action(this.value);", @class = "form-control" })
        </div>
        <label class="control-label">
            or @Html.ActionLink("Add New", "Create")

        </label>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">
            Chain Name
        </label>
        <div class="col-md-3">
            @Html.TextBox("ChainName", null, new { @class = "form-control" })
        </div>
        <label class="col-sm-2 control-label">
            Username
        </label>
        <div class="col-md-3">
            @Html.TextBox("username", null, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">
            Chain Code
        </label>
        <div class="col-md-3">
            @Html.TextBox("ChainCode", null, new { @class = "form-control" })
        </div>
        <label class="col-sm-2 control-label">
            Password
        </label>
        <div class="col-md-3">
            @Html.Password("password", null, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Update" onclick="UpdateChain()" class="btn btn-default" />
        </div>
    </div>
</div>
}

<script type="text/javascript">
    function UpdateChain(){
        var _vddlChainID = $("#ddlchainname").val();
        alert("Your Selected ID = " + _vddlChainID);
        $.ajax({
            url: '@Url.Action("UpdateChain", "Chains")',
            type: "POST",
            data: { "id": _vddlChainID }
        });
    }
</script>

Durch Dropdown-Auswahl, die ich Füllen Sie alle Textfelder, wenn ich ein Formular Einreichen, dann bekomme ich Fehler.

Routing

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

Modell

public partial class chain
{
    public chain()
    {
        this.templates = new HashSet<template>();
        this.hotels = new HashSet<hotel>();
    }

    public long chain_id { get; set; }
    public string name { get; set; }
    public string code { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public long created_by { get; set; }
    public System.DateTime created_on { get; set; }
    public Nullable<long> updated_by { get; set; }
    public Nullable<System.DateTime> updated_on { get; set; }

    public virtual ICollection<template> templates { get; set; }
    public virtual ICollection<hotel> hotels { get; set; }
}
  • Pflege zu zeigen, Ihre Arbeitspläne? Ich glaube, dass ist das problem. Die default-route benötigt eine ID.
  • Sie haben entweder ausgelassen mit einigen code oder nicht viel Sinn macht hier. Warum sind Sie mit der AJAX-post sowie dem Absenden des Formulars zur gleichen Zeit (Sie macht 2 Anrufe - eine Weitergabe der id-Wert (AJAX), die nichts tut und den anderen vorbei chain (SUBMIT) ohne die id
  • ich habe nicht allzu viel Ahnung von MVC, vielleicht meine Art zu arbeiten ist falsch, also bitte. guide mich, dies zu korrigieren. Dank
  • Sie haben zahlreiche Fehler. Für instance, die Sie Rendern eine textbox mit name="ChainName" but your model does not include a property with the namae ChainName " (zumindest nicht nach Ihren [Bind(Include= ...)] Liste. Ihre [Bind(Include= ...)] gehören auch Eigenschaften, für die Sie nicht selbst Rendern eines Steuerelements. Aber das Hauptproblem ist, dass Sie 2 Anrufe auf dem controller (das ist javascript nicht erforderlich). Bitte posten Sie Modell, so kann ich Euch führen.
  • [Bind(Include=.....)] in diesem Zusammenhang, was wir an, das Html-control name der Tabelle oder Spalte name? ich update auch meine Frage mit dem Modell.
  • Optional, aber ja. Wenn Sie es verwenden, muss es mit den Namen der Steuerelemente, die müssen den Namen entsprechen, der Sie Eigenschaften (was es derzeit nicht tut), aber du solltest mit einem view-Modell-in diesem Fall. Können Sie bitte erklären Sie den Zweck der Dropdownliste, und was ist das Skript für onchange = Action(this.value)
  • onchange= " Aktion(dies.Wert) Aufruf der Methode Controller über AJAX zu binden alle textbox-Daten nach dropdown-Auswahl . Sie können dies überprüfen, stackoverflow.com/questions/26031197/...
  • Lassen Sie uns weiter, diese Diskussion im chat.

InformationsquelleAutor Anjyr | 2014-10-09
Schreibe einen Kommentar