2017-05-22 6 views
-3

Mein Controller-Methode an die Steuerung übergeben wird:Formularwerte nicht

Bisher
[HttpGet] 
    public ActionResult NewInventory() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public async Task<ActionResult> NewInventory(string bookID, string ttlin, string lowin, string Outnow) 
    { 
     // test values passed, etc..... 
    } 

nur die „lowin“ Wert korrekt übergeben wird. Alle anderen Werte sind auf "0" gesetzt (ich glaube aufgrund der Tatsache, dass die Datentypen in SQL DB auf "nicht null" gesetzt sind). Warum ist das?

Ich nehme an, weil nur ein Wert korrekt übergeben wird und keine Ausnahmen ausgelöst werden, fehlt der Ansicht Seitencode die anderen die Felder zu übergeben.

Code anzeigen:

@model LibraryMS.Inventory 

@{ 
ViewBag.Title = "newinventory"; 
} 

<h2>newinventory</h2> 

@using (Html.BeginForm("NewInventory","BookInfo", FormMethod.Post)) 
{ 
@Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    <h4>Inventory</h4> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.BookID, "BookID", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.BookID, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.BookID, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.TotalIn, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.TotalIn, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.TotalIn, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.LowIn, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.LowIn, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.LowIn, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Out, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Out, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Out, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
} 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

Betrachtet werden die Werte weitergegeben werden.

+0

poste deinen Formularcode und wenn du deine Get-Methode für dieses NewInventory-Formular posten könntest. – mvermef

+0

Hallo Luv2Learn! Würde es Ihnen etwas ausmachen, wenn Sie Ihre Ansicht posten? Ich bin auf dieses Problem einige Male wegen des Namensschilds in meinem HTML, das nicht richtig ist, wie ASP.Net die Formulardaten in Ihr Modell umwandelt, gelaufen. – ThomW

+0

Änderungen an der Frage wurden vorgenommen, um Code anzeigen und Methode für Ansicht anzeigen anzuzeigen. – Luv2Learn

Antwort

-1

Es stellt sich heraus, dass die Parameter der Controller-Methode gleich geschrieben werden müssen, was an sie übergeben wird. Zum Beispiel:

Mit dem automatisch generierten Formular, das html helper @Beginform verwendet, sind alle Felder vorhanden. Die Parameter in der Controller-Methode stimmen jedoch nicht mit den Klassenfeldern des Inventars überein.

public partial class Inventory 
{ 
    public string BookID { get; set; } 
    public short TotalIn { get; set; } 
    public short LowIn { get; set; } 
    public short Out { get; set; } 

    public virtual BookInfo BookInfo { get; set; } 
} 

den paramters Vergleich:

[HttpPost] 
public async Task<ActionResult> NewInventory(string bookID, string ttlin, string lowin, string Outnow) 
{ 
    // test values passed, etc..... 
} 

Das Update war ofcoarse die params das gleiche machen, Kapitalisierung keine Rolle spielt.

[HttpPost] 
public async Task<ActionResult> NewInventory(string bookID, string totalin, string lowin, string Out) 
{ 
    // test values passed, etc..... 
} 

Es war ein einfacher Fehler, aber nahm mir etwas Zeit, um dies herauszufinden. Hoffentlich hat das jemand anderem geholfen!

+0

Sie sollten nicht jede Eigenschaft des Modells, sondern das Modell selbst erwarten. Das ist sehr schlechtes Codieren und folgt keiner ASP.NET MVC-Konvention –

+0

@CamiloTerevinto Können Sie einen Link zur Verfügung stellen, wo ich das nachlesen kann? – Luv2Learn

+0

Sicher, schau [hier] (https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-crud- function-with-the-entity-framework-in-asp-net-mvc-application), Abschnitt "Aktualisieren der Create Page" und weiter –

Verwandte Themen