2016-07-22 11 views
1

Ich muss einen Wert in einem bearbeitbaren Textfeld auf meiner mvc-Seite anzeigen, wenn es zuerst lädt, wenn es existiert. Ich habe eine Funktion, die sich darum kümmert, den Wert zu bekommen, den ich brauche, aber ich muss Parameter aus dem aktuellen Modell übergeben, um das zu bekommen, was ich von der Datenbank brauche. Das Problem, das ich habe, ist, diesen Wert in das Textfeld zu bekommen. Was ich versucht warMVC4 cshtml Seite Funktionsaufruf

cshtml:

@Html.TextBoxFor(model => model.AdjustedLiabilityAmount, new { @Value=OBS_LIB.BLL.JeopardyAssessment.JeopardyAssessment.GetLatestAdjustedLiabilityAmount(Model.DOTNumber, Model.LiabilityAmount))} 

ich eine rote Wellen, dass „Der Name‚Wert‘nicht im aktuellen Kontext nicht vorhanden“

Also habe ich versucht, eine andere Technik, die ich über lesen Das war so.

Controller:

public ActionResult Index() 
    { 
     ViewBag.AdjustedValue = OBS_LIB.BLL.JeopardyAssessment.JeopardyAssessment.GetLatestAdjustedLiabilityAmount(Model.DOTNumber, Model.LiabilityAmount); 

cshtml: "Der Name 'Model' nicht im aktuellen Kontext nicht vorhanden"

@Html.TextBoxFor(model => model.AdjustedLiabilityAmount, new { @Value=ViewBag.AdjustedValue)} 

Diesmal erhalte ich die roten Wellen

Ich bin mir sicher, ich vermisse nur etwas Grundlegendes, da ich neu bei MVC bin.

Jede Hilfe wird sehr geschätzt.

Entire Actionindex:

public ActionResult Index() 
    { 
     ViewBag.AdjustedValue = OBS_LIB.BLL.JeopardyAssessment.JeopardyAssessment.GetLatestAdjustedLiabilityAmount(Model.DOTNumber, Model.LiabilityAmount); 
     var Report = new OBS_LIB.DTO.JeopardyAssessmentReport(); 
     Report.Stage = 1; 
     Report.Status = "Active"; 
     Report.ReportItems = OBS_LIB.BLL.JeopardyAssessment.JeopardyAssessment.GetJAReportItems(Report.Stage, Report.Status); 
     return View(Report); 
    } 
+0

Warum möchten Sie '@ Value' anstelle von' Value' verwenden? Razor erkennt es im Allgemeinen als "schreibe in Ausgabe", anstatt C-Code als Escape-Wert für spezielle Namen verwenden zu lassen ... (Auch "Value" ist kein spezieller Name - macht für mich keinen Sinn, stattdessen "@ Value" zu verwenden) –

Antwort

2

Sie wollen, so etwas tun:

Klasse:

public class ModelClassHere { 
    public float Liability {get;set;} 
} 

Controller:

public ActionResult Index(ModelClassHere model) { 
    model.Liability = 10.00; 
    return View(model); // pass model to the view 
} 

Ausblick:

@Html.TextBoxFor(x => x.Liability) // 'x' can be anything 

EDIT *

Wenn Sie bereits ein Modell haben und einen einfachen Wert übergeben müssen:

Controller:

public ActionResult Index(ModelClassHere model, string otherValue) { 
    model.Liability = 10.00; 
    ViewBag.Liability = model.Liability; 
    return View(model); // pass model to the view 
} 

Ausblick:

<input type="text" id="otherValue" name="otherValue" value="@ViewBag.Liability.ToString()" /> 
+0

Das Problem dabei ist, dass der ActionResult Index bereits etwas zurückgibt. Vollständige Frage zu obiger Frage hinzugefügt. – Chris

+0

Am besten fügen Sie Ihr Feld zu Ihrem Berichtsmodell hinzu. Aber sehen Sie sich den Schnitt an, den ich gemacht habe, es ist der einzige andere Weg, an den ich denken kann, besonders wenn Sie vorhaben, die Daten nach der Bearbeitung an den Controller zu übergeben. @Chris –

1

Sie müssen Ihr Modell in der Controller zu übergeben

return view(myModelName); 

sicherstellen, dass Sie Zugriff auf sie in Ihrem Controller haben.

Auch Ihre Ansicht muss das Modell in der @ Model-Zeile an der Spitze verweisen.

schließlich das Modell zu nennen wäre es

Ansicht:

Model.myModelName 
2

können Sie verwenden @ Html.TextBox ("AdjustedLiabilityAmount" (dezimal) ViewBag.AdjustedValue)}

Oder

@ Html.TextBox ("AdjustedLiabilityAmount", Model.AdjustedLiabilityAmount == null? (Dezimal) ViewBag.AdjustedValue: Model.AdjustedLiabilityAmount)}

Im Dezimaltyp setzen Sie Ihren Typ, den Sie benötigen.