2013-11-19 4 views
0

Я пытался выяснить, как заполнить specfic-интерфейс через форму в представлении. Интерфейс в другом проекте и пространство имен, то, что моего контроллера/зрения и автоматически создается для хранения данных в базе данных:Передача интерфейса от представления к контроллеру

пространства имен Интерфейс Код:

DataAccess.DAL.IVehicle 

namespace DataAccess.DAL 
{ 
    public partial interface IVehicle 
    { 
     String vehicleName { get; set; } 
     int maxSpeed { get; set; } 
    } 
} 

У меня есть контроллер, который имеет метод действия для получения информации из формы в представлении:

Controller Код:

namespace coreproject.Controllers 
{ 
    public class NewVehicleController 
    { 
     [HttpPost, ValidateInput(false)] 
     public JsonResult AddVechicle(IVehicle newVehicle) 
     { 
      // I expect that newVechicle is populated via the form 
     } 
    } 
} 

Я понимаю, что я должен использовать Html.BeginForm в представлении. Ниже приведен какой-то код, который я придумал, что, по моему мнению, понадобится в представлении.

View Code:

<% 
// This is not working, I am not sure how to tell the view I want the form 
// to use the interface located in the following namespace. 
@Model DataAccess.DAL.IVehicle; 

using (Html.BeginForm("AddVehicle", "NewVechicle", FormMethod.Post)) 

// Below I understand that I would need some code in the form of Html.EditorFor to 
// populate the IVehicle interface in the form. I have seen this as an example:  
<%: Html.EditorFor(model => model.VehicleName) %> 
<%: Html.EditorFor(model => model.maxSpeed) %> 
<%: 
} 
%> 

Вопросы, которые я бы в два раза, и связаны с точки зрения:

  1. Как узнать мнение я хочу использовать интерфейс, расположенный в DataAccess .DAL, который находится в другом проекте и пространстве имен, чем представление?
  2. Как заполнить вышеупомянутый интерфейс в форме, чтобы передать его контроллеру?

Любая помощь была бы принята с благодарностью.

+0

Вам не хватает e «GET» часть контроллера, является ли это полным источником для проекта? –

ответ

1

Здесь вы смешиваете множество концепций.

  1. Перейдите в Visual Studio и создайте новый веб-сайт MVC.
  2. Запустите его и посмотрите, как он работает.
  3. Затем перейдите на google и найдите концепцию интерфейсов.
  4. Вернитесь на свой недавно созданный веб-сайт MVC и посмотрите на то, что у вас есть почта.

Редактировать: То, что вы пытаетесь, невозможно! Вы просите структуру MVC создать экземпляр интерфейса, это невозможно!

Что вы должны сделать, это иметь конкретный класс в параметре Действие:

[HttpGet] 
public ActionResult AddVechicle() 
{ 
    return View(new Vehicle()); 
} 

[HttpPost, ValidateInput(false)] 
public JsonResult AddVechicle(Vehicle newVehicle) 
{ 
    // I expect that newVechicle is populated via the form 
} 

вы могли бы объявить класс «транспортное средство» следующим образом

public class Vehicle :IVehicle 
{ 
    String vehicleName { get; set; } 
    int maxSpeed { get; set; } 
} 

Я нету testet, если вид будет принимать интерфейс в качестве модели, вы можете лучше изменить его на класс «Автомобиль»

<% 
// view name: AddVehicle 
// This is not working, I am not sure how to tell the view I want the form 
// to use the interface located in the following namespace. 
@Model Vehicle; 

using (Html.BeginForm("AddVehicle", "NewVechicle", FormMethod.Post)) 

// Below I understand that I would need some code in the form of Html.EditorFor to 
// populate the Vehicle concrete class in the form. 
<%: Html.EditorFor(model => model.VehicleName) %> 
<%: Html.EditorFor(model => model.maxSpeed) %> 
<%: 
} 
%> 
+0

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

+0

Я пошел дальше и решил проблему с тем, как найти контроллер из представления при отправке формы. Теперь мой единственный вопрос связан с отправкой интерфейса на контроллер. – user3008878

+0

Ответ обновлен ... почему вы хотите «JsonResult», это кажется неправильным ... Пожалуйста, напишите полный источник. –

Смежные вопросы