Je suis sûr qu'il y a eu beaucoup de gens qui ont posé ce genre de question mais je n'arrive pas à comprendre comment le dire.Page pour créer un objet et un sous-objet
Je vais essayer d'expliquer. Je travaille à modéliser un réseau Ethernet où les appareils ont des adresses IP. J'ai configuré mes modèles de structure d'entité afin que l'adresse IP et le sous-réseau soient stockés dans une table distincte pour garantir l'unicité du système. Je souhaite que l'utilisateur puisse créer un périphérique et son adresse IP associée en même temps si l'adresse IP qu'ils souhaitent ne figure pas déjà dans une liste déroulante.
Je SETIP une partie de la RenderPartial page d'adresse IP sur la page de l'appareil et je reçois cette erreur:
Voici la question, Comment puis-je corriger cette erreur:
The model item passed into the dictionary is of type
PcnWeb.Models.Device
, but this dictionary requires a model item of typePcnWeb.Models.IPAddress
.
Voici mon modèles:
Adresse IP modèle:
namespace PcnWeb.Models
{
public class IPAddress
{
public virtual ICollection<Device> Devices { get; set; }
[Key]
public int ipAddressRecId { get; set; }
public Nullable<int> ipOctet1 { get; set; }
public Nullable<int> ipOctet2 { get; set; }
public Nullable<int> ipOctet3 { get; set; }
public Nullable<int> ipOctet4 { get; set; }
public Nullable<int> smOctet1 { get; set; }
public Nullable<int> smOctet2 { get; set; }
public Nullable<int> smOctet3 { get; set; }
public Nullable<int> smOctet4 { get; set; }
}
}
et le modèle de l'appareil:
namespace PcnWeb.Models
{
public class Device
{
[Key]
public int deviceRecId { get; set; }
public int ipAddressRecId { get; set; }
[Required, StringLength(64)]
[Unique]
public string Name { get; set; }
[StringLength(256)]
public string Comment { get; set; }
public virtual IPAddress IPAddress { get; set; }
}
}
je l'aurais pensé que ce serait assez facile d'avoir la page de création de dispositif associé à une page de création de ipaddress en ligne.
est ici la page de l'appareil:
@model PcnWeb.Models.Device
@{
ViewBag.Title = "Create a Device";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Device</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ipAddressRecId, "IPAddress")
</div>
<div class="editor-field">
@Html.DropDownList("ipAddressRecId", String.Empty)
@Html.ValidationMessageFor(model => model.ipAddressRecId)
</div>
@{
Html.RenderPartial("~/Views/IP_Address/_Create.cshtml");
}
<div class="editor-label">
@Html.LabelFor(model => model.Name, "Name")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Comment, "Comment")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Comment)
@Html.ValidationMessageFor(model => model.Comment)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Voici l'adresse IP partielle:
EDIT: Désolé j'ai oublié d'inclure ce
@model PcnWeb.Models.IPAddress
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>IPAddress</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ipOctet1, "ipOctet1")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ipOctet1)
@Html.ValidationMessageFor(model => model.ipOctet1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ipOctet2, "ipOctet2")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ipOctet2)
@Html.ValidationMessageFor(model => model.ipOctet2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ipOctet3, "ipOctet3")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ipOctet3)
@Html.ValidationMessageFor(model => model.ipOctet3)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ipOctet4, "ipOctet4")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ipOctet4)
@Html.ValidationMessageFor(model => model.ipOctet4)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.smOctet1, "smOctet1")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.smOctet1)
@Html.ValidationMessageFor(model => model.smOctet1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.smOctet2, "smOctet2")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.smOctet2)
@Html.ValidationMessageFor(model => model.smOctet2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.smOctet3, "smOctet3")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.smOctet3)
@Html.ValidationMessageFor(model => model.smOctet3)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.smOctet4, "smOctet4")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.smOctet4)
@Html.ValidationMessageFor(model => model.smOctet4)
</div>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Donc de tout cela, ça me va bien, la validation fonctionne côté client. Je vais devoir écrire du javascript pour cacher l'adresse IP partielle à moins qu'ils ne choisissent de nouveau dans la liste déroulante.
Voici à nouveau la question, Comment puis-je corriger cette erreur:
The model item passed into the dictionary is of type
PcnWeb.Models.Device
, but this dictionary requires a model item of typePcnWeb.Models.IPAddress
.
Je suis confus lorsque vous dites que l'exemple a fonctionné pour vous. Avez-vous essayé de soumettre le formulaire? Je vais ajouter la vue partielle de l'adresse IP ci-dessus. – TechplexEngineer
Lorsque j'essaie de faire ceci '' '@ Html.Partial (" path_to_view ", Model.IPAddress)' '' Je reçois cette erreur: '' 'La référence de l'objet n'est pas définie sur une instance d'un objet.'' avoir à faire quelque chose de fantaisie dans le contrôleur? – TechplexEngineer
a modifié mon post – maxs87