【发布时间】:2013-07-22 22:12:26
【问题描述】:
我有一个名为 Server 的模型类,并且我创建了一个新的 ServerToEdit viewModel 类,但是当我尝试提交 viewModel 时,我会在 repository.save() 方法上收到以下错误。
传入字典的模型项是类型 'TMS.Models.Server',但此字典需要类型的模型项 'TMS.ViewModels.ServerToEdit'。
viewModel 类是:-
public class ServerToEdit
{
public Server Server { get; set; }
[Required]
public String IPAddress { get; set; }
}
创建视图的一部分是:-
model TMS.ViewModels.ServerToEdit
@* This partial view defines form fields that will appear when creating and editing entities *@
@Html.AntiForgeryToken()
<div class="editor-label">
@Html.LabelFor(model => model.Server.CustomerName)
</div>
<div class="editor-field">
@Html.EditorFor(model =>model.Server.CustomerName)
@Html.ValidationMessageFor(model =>model.Server.CustomerName)
</div>
<div class="editor-label">
IP Address
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IPAddress)
@Html.ValidationMessageFor(model => model.IPAddress)
</div>
IPAddress
<div class="editor-label">
@Html.LabelFor(model =>model.Server.ILOIP)
</div>
<div class="editor-field">
@Html.EditorFor(model =>model.Server.ILOIP)
@Html.ValidationMessageFor(model =>model.Server.ILOIP)
</div>
创建肌动蛋白的方法是:-
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Server server, TechnologyIP technologyIP)
{
try
{
if (ModelState.IsValid)
{
repository.InsertOrUpdateServer(server,technologyIP);
repository.Save();
return RedirectToAction("Index");
}
最后InsertOrUpdateServer存储库方法是:-
public void InsertOrUpdateServer(Server server, TechnologyIP technologyIP)
{
if (server.ServerID == default(int))
{
// New entity
int technologyypeID = GetTechnologyTypeID("Server");
Technology technology = new Technology
{
IsDeleted = true,
TypeID = technologyypeID,
Tag = "S" + GetTagMaximumeNumber(technologyypeID).ToString()
};
InsertOrUpdateTechnology(technology);
Save();
var auditinfo = IntiateAudit(tms.AuditActions.SingleOrDefault(a => a.Name.ToUpper() == "ADD").ActionID,
tms.TechnologyTypes.SingleOrDefault(a => a.Name.ToUpper() == "Server").AssetTypeID,
"TDMGROUP\administrator", technology.TechnologyID);
server.ServerID = technology.TechnologyID;
technologyIP.TechnologyID = technology.TechnologyID;
tms.Servers.Add(server);
InsertOrUpdateTechnologyIP(technologyIP);
technology.IsDeleted = false;
InsertOrUpdateTechnology(technology);
InsertOrUpdateAudit(auditinfo);
}
else
{
// Existing entity
var auditinfo = IntiateAudit(tms.AuditActions.SingleOrDefault(a => a.Name.ToUpper() == "EDIT").ActionID,
tms.TechnologyTypes.SingleOrDefault(a => a.Name.ToUpper() == "Server").AssetTypeID,
"TDMGROUP\administrator", server.ServerID);
tms.Entry(server).State = EntityState.Modified;
tms.Entry(technologyIP).State = EntityState.Modified;
InsertOrUpdateAudit(auditinfo);
}
}
提前感谢您的帮助?
【问题讨论】:
-
您的 Action 中的 TechnologyIP 来自哪里?它既不在您的 ViewModel 中,也不在您的 View 中。
-
TechnologyIP 只是一个存储@Html.EditorFor(model => model.IPAddress) 和 TechnologyID.so 我只需要获取@Html.EditorFor(model => model.IPAddress ) 从视图中,然后在存储库方法中,我将为它填充 TechnologyID。
标签: asp.net asp.net-mvc