Я работаю над созданием веб-сайта, который обращается к таблице в SQL Management Server. Пользователь должен иметь возможность просматривать, редактировать, удалять и создавать новые записи в таблице, используя мой сайт. Используемая таблица называется DeviceUnderTest и имеет следующие столбцы: DeviceUnderTest (pk), DeviceUnderTest (nk), Notes (nk), FaultApplication (fk), Firmware (fk), Hardware (fk), Power (fk), Местоположение (fk), PreEventTime (nk), HandleRate (nk). До сих пор я создал модель, которая подключается к основной таблице DeviceUnderTest, а также к другим таблицам, на которые ссылаются столбцы внешнего ключа. Я создал контроллер, а также индекс, детали, удалить и создать страницу просмотра. Мое представление индекса - это таблица, и я выяснил, как заменить все значения внешнего ключа соответствующими таблицами из таблиц, на которые они ссылаются. Одна вещь, которую я не могу понять, это страница создания. Пользователи будут вводить информацию в виде значений, на которые ссылаются столбцы fk, а не самих значений внешних ключей. Я не могу понять, как изменить пользовательский ввод обратно на правильное значение внешнего ключа, чтобы запись могла быть правильно добавлена в таблицу noth на сервере sql, а также на моем сайте. Если у кого-то есть какие-либо предложения, они очень ценятся.
Код контроллера:
// GET: Circuit/Create
public ActionResult Create()
{
return View();
}
// POST: Circuit/Create
[HttpPost]
public ActionResult Create(DeviceUnderTest device)
{
try
{
dbModel.DeviceUnderTests.Add(device);
dbModel.SaveChanges();
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Создать код просмотра:
@model Template_Website.Models.DeviceUnderTest
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>DeviceUnderTest</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.pkDeviceUnderTest, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.pkDeviceUnderTest, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.pkDeviceUnderTest, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.nkDeviceUnderTest, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.nkDeviceUnderTest, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.nkDeviceUnderTest, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.nkNotes, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.nkNotes, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.nkNotes, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.FaultApplication.nkFaultApplication, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FaultApplication.nkFaultApplication, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.FaultApplication.nkFaultApplication, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Firmware.nkFirmware, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Firmware.nkFirmware, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Firmware.nkFirmware, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Hardware.nkHardware, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Hardware.nkHardware, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Hardware.nkHardware, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.fkPower, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.fkPower, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.fkPower, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Location.nkLocation, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Location.nkLocation, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Location, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.nkPreEventTime, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.nkPreEventTime, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.nkPreEventTime, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.nkHandleRating, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.nkHandleRating, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.nkHandleRating, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<<button type="submit" class="btn btn-default " value="Create" onclick="return confirm('Are you sure?')">Create</button>
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Индекс Просмотр кода:
@model IEnumerable<Template_Website.Models.DeviceUnderTest>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
</th>
<th>
@Html.DisplayNameFor(model => model.pkDeviceUnderTest)
</th>
<th>
@Html.DisplayNameFor(model => model.nkDeviceUnderTest)
</th>
<th>
@Html.DisplayNameFor(model => model.nkNotes)
</th>
<th>
@Html.DisplayNameFor(model => model.FaultApplication.nkFaultApplication)
</th>
<th>
@Html.DisplayNameFor(model => model.Firmware.nkFirmware)
</th>
<th>
@Html.DisplayNameFor(model => model.Hardware.nkHardware)
</th>
<th>
@Html.DisplayNameFor(model => model.fkPower)
</th>
<th>
@Html.DisplayNameFor(model => model.Location.nkLocation)
</th>
<th>
@Html.DisplayNameFor(model => model.nkPreEventTime)
</th>
<th>
@Html.DisplayNameFor(model => model.nkHandleRating)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.CheckBoxFor(modelItem => item.Selected)
</td>
<td>
<input type="button" value="Edit" class="btn btn-default" onclick="@("window.location.href='" + @Url.Action("Edit", "Circuit", new { id = item.pkDeviceUnderTest } ) + "'");" />
</td>
<td>
<input type="button" value="Details" class="btn btn-default" onclick="@("window.location.href='" + @Url.Action("Details", "Circuit", new { id = item.pkDeviceUnderTest }) + "'");" />
</td>
<td>
<input type="button" value="Delete" class="btn btn-danger" onclick="@("window.location.href='" + @Url.Action("Delete", "Circuit", new { id = item.pkDeviceUnderTest }) + "'");" />
</td>
<td>
@Html.DisplayFor(modelItem => item.pkDeviceUnderTest)
</td>
<td>
@Html.DisplayFor(modelItem => item.nkDeviceUnderTest)
</td>
<td>
@Html.DisplayFor(modelItem => item.nkNotes)
</td>
<td>
@Html.DisplayFor(modelItem => item.FaultApplication.nkFaultApplication)
</td>
<td>
@Html.DisplayFor(modelItem => item.Firmware.nkFirmware)
</td>
<td>
@Html.DisplayFor(modelItem => item.Hardware.nkHardware)
</td>
<td>
@Html.DisplayFor(modelItem => item.fkPower)
</td>
<td>
@Html.DisplayFor(modelItem => item.Location.nkLocation)
</td>
<td>
@Html.DisplayFor(modelItem => item.nkPreEventTime)
</td>
<td>
@Html.DisplayFor(modelItem => item.nkHandleRating)
</td>
</tr>
}
</table>
Код модели DeviceUnderTest:
namespace Template_Website.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class DeviceUnderTest
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public DeviceUnderTest()
{
this.TestRecords = new HashSet<TestRecord>();
}
public bool Selected { get; set; }
[Required]
public int pkDeviceUnderTest { get; set; }
[Required]
public string nkDeviceUnderTest { get; set; }
[Required]
public string nkNotes { get; set; }
public Nullable<int> fkFaultApplication { get; set; }
public Nullable<int> fkFirmware { get; set; }
public Nullable<int> fkHardware { get; set; }
public Nullable<int> fkPower { get; set; }
public Nullable<int> fkLocation { get; set; }
public Nullable<int> nkPreEventTime { get; set; }
public Nullable<int> nkHandleRating { get; set; }
public virtual FaultApplication FaultApplication { get; set; }
public virtual Firmware Firmware { get; set; }
public virtual Hardware Hardware { get; set; }
public virtual Location Location { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<TestRecord> TestRecords { get; set; }
}
public class DeviceUnderTestModel
{
public List<DeviceUnderTest> device { get; set; }
}
}
Код модели оборудования:
namespace Template_Website.Models
{
using System;
using System.Collections.Generic;
public partial class Hardware
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Hardware()
{
this.DeviceUnderTests = new HashSet<DeviceUnderTest>();
}
public int pkHardware { get; set; }
public string nkHardware { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<DeviceUnderTest> DeviceUnderTests { get; set; }
}
}