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 dieid
- 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Übergeben Sie eine
object
vonchain
aber Sie haben nicht den Mehrwert vonid
im es überall. Sie müssenvalue
vonid
und fügen Sie ihn inchain object
.id
Wert ist bereits überschritten, mitdata: { "id": _vddlChainID }
. Das problem ist 2-Aufrufe durchgeführt werden, um die controller.Ihre id ist null, wenn Sie das Formular abschicken, das ist, warum Sie diese Fehlermeldung bekommen.
Geben Sie entweder die id parameter nullable, wie Sie getan haben, in der get-Methode oder
speichern der id in einem hidden-Feld zu übergeben, wird es automatisch mit dem Modell wie diesem
oder übergeben Sie es manuell
string ddlchainname
in der "string" ist der Typ des Wertes übergeben wird durch dropdown-ddlchainname ist der name des dropdown