mayank.bhuvnesh Ответов: 2

Добавить данные из одной модели в другую?


Я отображаю данные из базы данных с помощью модели. При отображении данных я добавил еще один столбец с текстовыми полями, чтобы пользователь мог ввести количество в этом текстовом поле. После отправки данных я хочу, чтобы эти данные хранились в другой таблице.

например

У меня есть столик Инвентарь
идентификатор
имя
машиносчитываемый паспорт

Вид у меня четыре колонки
идентификатор
имя
машиносчитываемый паспорт
(Текстовый)

Данные представления должны быть отправлены в Заказы стол.

Как я могу это сделать?

Что я уже пробовал:

@model IEnumerable<SaveTextboxes.Models.inventory>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table border="1">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.userLogin.username)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Category.category1)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Brand.Brand1)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.productName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.mrp)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.prodDesc)
        </th>
        <th>Qty.
        </th>
        <th></th>
    </tr>
    @using (Html.BeginForm("Order", "Product"))
    {

        foreach (var item in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.userLogin.username)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Category.category1)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Brand.Brand1)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.productName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.mrp)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.prodDesc)
            </td>
            <td>
                I want to add this textbox and save it in orders table
                @Html.TextBoxFor(modelItem => item.qty)
            </td>
        </tr>
        }
        <tr>
            <td colspan="7">
                <button type="submit" value="Submit">Submit</button>
            </td>
        </tr>
    }

</table>

2 Ответов

Рейтинг:
0

David_Wimbley

Поэтому, чтобы убедиться, что я правильно понял.

У вас есть 2 модели. Инвентаризация и заказы. Эти модели также соответствуют таблицам запасов и заказов?

Поскольку я не вижу никакого кода для вашего действия в вашем контроллере, я собираюсь его составить.

Сначала я предложу одно из многих возможных решений, а затем предложу предложение.

[HttpPost]
public ActionResult Order(Inventory model)
{
    //I think this is the syntax to get form values from a request. Either way, general idea, I didn't open VS cause I'm lazy
    var qty = Request.Form["qty"];
   //Here you would do the conversion from Inventory model to Order model
   
   //Option 1: Basic manual mapping
   var order = new Order();
   order.name = model.name;
   order.mrp = model.mrp;
   order.qty = qty;
   //If using EF, call your repository/context to add and save the order entity to DB.

   //Option 2: Use an auto mapper in this instance. I prefer express mapper.
   
// I say automapper because you have 2 objects with same properties. If your properties were different than you can still use express mapper but it has some additional configuration/setup needed to get it working.

   // Express mapper:http://www.expressmapper.org/
   Mapper.Register<order,>();
   var orderOpt2 = Mapper.Map<inventory,>(model);
   //Map additional properties specific to order
   orderOpt2.qty = qty;
   //Save to DB
}


Теперь я бы предложил использовать модель, специфичную для этого представления, которая охватывает все поля/свойства, необходимые для этого представления. Вы заявили в своем вопросе, что инвентарь не имеет свойства qty, ваше представление строго типизировано для объекта инвентаря, но вы пытаетесь использовать строго типизированное редактирование для свойства этого объекта, которое не существует.

То, что я говорю, сделать что-то вроде

public class InventoryModel
{
    public int Id {get;set;}
    public string name {get;set;}
    public string mrp {get;set;}
    public int qty {get;set;}
}

public class ProductController : Controller 
{
    public ActionResult Inventory(int invid)
    {
        var inventoryFromDb = //do db select here;
        var model = new InventoryModel(); // Similar to above, could use auto mapper or manually map. 
        model.Id = inventoryFromDb.id;
        model.name = inventoryFromDb.name;
        model.mrp = inventoryFromDb.mrp;
        //notice not doing anything here with qty.
        return View(model);
    }
}


Тогда, по вашему мнению, вы бы использовали InventoryModel вместо SaveTextboxes.Модели.инвентаризация


mayank.bhuvnesh

Почему я должен создать InventoryModel, как описано выше, так как у меня уже есть таблица запасов и заказов. Единственное отличие заключается в том, что в инвентарной таблице нет поля Qty. Существует ли требование создать промежуточную таблицу или класс???

David_Wimbley

Нет необходимости использовать модель представления. Ты можешь делать все, что захочешь. Я просто утверждаю, что вы пытаетесь использовать свойство, которое, как вы говорите, не существует в вашем классе инвентаря, строго типизированным образом.

В вашем случае вы пытаетесь заставить свое представление делать то, что ваша модель, инвентарь, не может сделать...то есть использовать свойство qty строго типизированным способом.

Модели представлений специфичны для самого представления и поэтому обычно не используются повторно, однако если существует необходимость в том, чтобы представление выполняло определенные действия/содержало свойства, которые могут быть не учтены моделью, то модель представления является возможным решением.

Рейтинг:
0

RaunakGupta

если у вас уже есть значение количества, то при вставке этих данных в таблицу запасов вы также можете вставить значение количества в таблицу заказов. в этом сценарии вам не нужна никакая viewmodel.