Just nu i M3-nätverket
Gå till innehåll

Får inte ur värdet med DisplayFor


sundrik

Rekommendera Poster

Hej!

 

Jag är väldigt ny på asp.net mvc3...

 

Har en post som jag skall modifiera. Jag har en Details view där jag har en parial view. I den kan jag få ut @Html.DisplayFor(model => model.WO.ID)

 

När jag skall editera denna post, så har jag Edit view. Men i den kan jag inte få ut samma DisplayFor helt plötsligt.

 

Detta är hela partial view:

@model Go.Models.WOPartialReport

<fieldset>
   <legend>Report</legend>

   <div class="display-label">InHour</div>
   <div class="display-field">
       @Html.DisplayFor(model => model.InHour)
   </div>

   <div class="display-label">h</div>
   <div class="display-field">
       @Html.DisplayFor(model => model.h) | @Html.DisplayFor(model => model.WO.ID)
   </div>
</fieldset>
<p>
   @Html.ActionLink("Edit", "Edit", "WOPartialReport", new { id = Model.ID },"") |
   @Html.ActionLink("Back to List", "Index")
</p>

 

Sen i Edit View så går det inte helt plötsligt.

@model Go.Models.WOPartialReport

@{
   ViewBag.Title = "Edit";
}

<h2>Edit</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
   @Html.ValidationSummary(true)
   <fieldset>
       <legend>WOPartialReport </legend>

       @Html.HiddenFor(model => model.ID) |

       @Html.DisplayFor(model => model.WO.ID) |

       <div class="editor-label">
           @Html.LabelFor(model => model.h)
       </div>
       <div class="editor-field">
           @Html.EditorFor(model => model.h)
           @Html.ValidationMessageFor(model => model.h)
       </div>

       <div class="editor-label">
           @Html.LabelFor(model => model.InHour)
       </div>
       <div class="editor-field">
           @Html.EditorFor(model => model.InHour)
           @Html.ValidationMessageFor(model => model.InHour)
       </div>
       <p>
           <input type="submit" value="Save" />
       </p>
   </fieldset>
}

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

 

Värdet blir inget alls fast det skulle vara en int. Varför fungerar det i den ena view och inte den andra?

Länk till kommentar
Dela på andra webbplatser

Den förväntar sig att du ska ändra på modellen WOPartialReport och det kanske inte går med underliggande objekt som WO är på modellen.

 

Hur ser objektet WOPartialReport ut?

Länk till kommentar
Dela på andra webbplatser

Det är en model för databas.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace Go.Models
{
   public class WOPartialReport
   {
       [Key]
       public virtual int ID { get; set; }
       public virtual int h { get; set; }
       public virtual int InHour { get; set; }        
       public WO WO { get; set; }


   }
}

 

Och den "WO" ser ut så här

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace Go.Models
{
   public class WO
   {
       public virtual int ID { get; set; }
       public virtual string  Label { get; set; }
       public virtual DateTime CreatedDateTime { get; set; }
       public virtual ICollection<WOPartialReport> PartialReports { get; set; }

   }
}

 

Jag försöker kunna koppla flera WOPartialReport till en WO. Det fungerar bra. Sedan så gör jag så jag kan ändra valfri WOPartialReport. Det fungerar. Men när det är ändrat så vill jag redirecta användaren tillbaka till en sida som visar usprungs "WO", och då behöver jag ha ut IDn för den.

Jag förstår inte varför jag inte kan få ut den i EDIT när jag kan få ut den i DETAILS.

 

EDIT/

Kan det ha med HasForeignKey att göra? Fast då borde det väl inte fungera i ena view och inte den andra?

Länk till kommentar
Dela på andra webbplatser

LÖST!

 

Jag lade in detta i "WOPartialReport"

 

 public int WOId { get; set; }
       [ForeignKey("WOId ")]

 

Så fungerade det om jag använde denna DisplayFor istället

@Html.DisplayFor(model => model.WOId)

 

Är inte helt hundra på vad jag gjorde eller varför det behöver lösas såhär. Speciellt inte när det fungerar i en annan view. Fast den view det fungerar med är en partial view i en annan som har modellen "WO".

 

Jaja, nu fungerar det iaf. :P

Länk till kommentar
Dela på andra webbplatser

Haha... osant...

 

Bara för att jag gjorde ändringen, så får jag felmeddelande när jag försöker uppdatera databasen.

 

The UPDATE statement conflicted with the FOREIGN KEY constraint "WO_PartialReports". The conflict occurred in database "Go.Models.GoDB", table "dbo.WO", column 'ID'.
The statement has been terminated.

 

Googlar som en tok.. Men blir inte direkt klok. Tips mottages gladeligen :)

Länk till kommentar
Dela på andra webbplatser

public class WOPartialReport
   {
       [Key]
       public virtual int ID { get; set; }
       public virtual int h { get; set; }
       public virtual int InHour { get; set; }    
       public virtual int WOID { get; set; }        
       public WO WO { get; set; }


   }

 

Det är sedan WOPartialReport.WOID som ska visa upp i din vymodel

Länk till kommentar
Dela på andra webbplatser

jo... Det har jag fått att fungera... Men detta felmeddelandet har gäckat mig länge nu:

The UPDATE statement conflicted with the FOREIGN KEY constraint "WO_PartialReports". The conflict occurred in database "Go.Models.GoDB", table "dbo.WO", column 'ID'.
The statement has been terminated.

 

Varför försöker den uppdatera ID kolumnen i WO tabellen, när det är WOPartialReport jag vill skall uppdateras?

Länk till kommentar
Dela på andra webbplatser

Äntligen det problemet löst...

lade bara till detta i EDIT viewn:

@Html.HiddenFor(model => model.WOId)

Länk till kommentar
Dela på andra webbplatser

Jag trodde att det var det jag skrev - men var väl inte tydlig nog. :)

Bra att du fick det att fungera.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...