2010-09-20 2 views
1

В моем последнем проекте я должен использовать сильно типизированные DataSets. У меня возникла проблема с отправкой формы контроллеру POST: я получаю ошибку без конструктора, т. Е. Не найден метод PostCreate post на контроллере. Я буду использовать любую помощь. Спасибо.Сильно типизированная привязка модели Dataset в ASP.NET MVC

Вот мой упрощенный код:

Вид:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyPortal.Models.MyTypedDataRow >" %> 
<% using (Html.BeginForm("OrderCreate", "Order", FormMethod.Post)) 
{%> 
    <%: Html.ValidationSummary(true)%> 
    <fieldset> 
     <legend>Fields</legend> 

     <p class="fields"> 
      <%: Html.Label("Customer")%> 
      <%: Html.TextBoxFor(model => model.CustomerName)%> 
      <%: Html.ValidationMessageFor(model => model.CustomerName)%> 
     </p> 
     <p> 
      <input type="submit" value="Add" /> 
     </p> 
    </fieldset> 

<% } %> 

Контроллеры:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult OrderCreate() 
{ 
    MyTypedDataTable table = new MyTypedDataTable(); 
    MyTypedDataRow row = table.NewMyTypedDataRow(); 

    return PartialView(row); 
} 


[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult OrderCreate(FormCollection coll, MyTypedDataRow row) 
{ 
    int result = m_repo.InsertGI(row); 
    if (result > 0) 
    { 
     return RedirectToAction("OrderList"); 
    } 
    else 
    { 
     return View("Error"); 
    } 
} 
+0

Вы используете MVC 1? – Stefanvds

+0

Нет, я использую MVC 2. – Jani

ответ

1

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

+0

Мои наборы данных основаны на дизайнерах, т. Е. Перетаскивают таблицы базы данных из Server explorer, и я думаю, что они все без конструкторов без параметров. Я это проверю. Tnx – Jani

0
  1. Написать вложение данных, которое может создавать MyTypedDataRow. Вы можете написать универсальное связующее, которое будет знать, как создать все ваши объекты, отличные от объектов по умолчанию.
  2. Создайте MyTypedDataRow в действии, а затем вызовите UpdateModel() вручную.
  3. Создайте дополнительный MyTypedDataRowViewModel, который будет копировать поля MyTypedDataRow (но также может добавлять атрибуты проверки, больше логики представления и т. Д.) И использовать AutoMapper для преобразования между ними. Передайте MyTypedDataRowViewModel в действие POST.
Смежные вопросы