Я должен реализовать функцию Create/Edit, используя диалог модели в ASP.NET MVC 4 с первым подходом базы данных Entity Framework, как показано ниже:
Я просмотрел следующую статью в сети при поиске решения для этого.
Это очень похоже на то, что я хочу, но единственное отличие заключается в том, что в моем случае имя Emp и код Emp являются статическими, но пользователь может динамически добавлять строки на стороне клиента в поле 1, поле 2 и раздел комментариев, поэтому в этом случае, как сохранить (создавать/редактировать) данные (динамически добавленные пользователем) в базу данных.
tblEmployee → эта таблица содержит имена EmpID, Emp и столбца Emp
tblTable1 → эта таблица имеет идентификатор (первичный ключ), EmpID (внешний ключ), Detail1
tblTable2 → эта таблица имеет идентификатор (первичный ключ), EmpID (внешний ключ), Detail2
Должен ли я использовать подход json/ajax или что-то еще, что вы предлагаете.
благодаря
Если пользователь может добавить Detail1
, Detail2
и Comment
динамически, определите их как модель, а затем добавьте в действие, как Detail2
ниже:
public class Detail1 {
public string Content {get; set;}
}
public class Detail2 {
public string Content {get; set;}
}
public class Comment {
public string Content {get; set;}
}
[HttpPost]
public ActionResult Create(string EmpName, string EmpCode, List<Detail1> detail1s, List<Detail2> detail2s, List<Comment> comments)
{
//save operations...
}
И просмотр:
@using (Html.BeginForm())
{
// other static fields..
<input type="button" value="Add Detail1" onclick="AddDetail1();" />
<input type="button" value="Add Detail2" onclick="AddDetail2();" />
<input type="button" value="Add Comment" onclick="AddComment();" />
<table id="LeftDetails1">
<tr>
<td>
Detail 1
</td>
</tr>
</table>
<table id="RightDetails2">
<tr>
<td>
Detail 2
</td>
</tr>
</table>
<table id="BottomComments">
<tr>
<td>
Comments
</td>
</tr>
</table>
}
<script type="text/javascript">
function AddDetail1() {
var rowDetail1 = $('#LeftDetails1 tr').length;
var index = rowDetail1 + 1;
$('#LeftDetails1').append("<tr><td><input type='hidden' name='detail1s.Index' value='" + index + "' /><input type='text' name='detail1s[" + index + "].Content' /></td></tr>");
}
function AddDetail2() {
var rowDetail2 = $('#RightDetails2 tr').length;
var index = rowDetail2 + 1;
$('#RightDetails2').append("<tr><td><input type='hidden' name='detail2s.Index' value='" + index + "' /><input type='text' name='detail2s[" + index + "].Content' /></td></tr>");
}
function AddComment() {
var rowComment = $('#BottomComments tr').length;
var index = rowComment + 1;
$('#BottomComments').append("<tr><td><input type='hidden' name='comments.Index' value='" + index + "' /><input type='text' name='comments[" + index + "].Content' /></td></tr>");
}
</script>
И вы можете дать значение EmpId
до 3 моделей после сохранения сотрудника. Во-первых, сохраните сотрудника, затем вы получите его Id
, затем укажите значение Detail1
для Detail1
, Detail2
и Comment
и сохраните снова.
Надеюсь, это сработает.
В параметрах контроллера параметры динамических свойств задаются как массивы.
Когда вы добавляете новую строку на стороне клиента, назовите свой элемент управления так же, как и имя параметра. то есть:
<input type="text" name="Detail1[0]" />
<input type="text" name="Detail1[1]" />
<input type="text" name="Detail1[2]" />
Когда вы отправляете сообщение на этот контроллер, вы должны увидеть, что все динамические данные заполнили ваши массивы. Вы можете обращаться с ключами, когда он туда доберется.