Samps Pro Ответов: 2

Как я могу отобразить подробные записи в файле detailpage в MVC4 с без entityfram работы


я занимаюсь с мастером детализацией.
я создал страницу показа деталей, которые показывают как основную, так и детальную запись.но без работы entityfram его предоставление

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

как сделать цикл здесь, чтобы получить подробную запись plz help

public ActionResult Details(int id)
        {
             DataTable dtblUser = new DataTable();
          
               string sql = " SELECT dbo.DiningArea.DiningSysSeq, dbo.DiningArea.DiningCode, dbo.DiningArea.DiningName, dbo.DiningArea.Floor, dbo.DiningTables.TableCode," ;
                       sql = sql + "  dbo.DiningTables.TableName, dbo.DiningTables.NOofSeat FROM dbo.DiningArea INNER JOIN ";
                       sql = sql + "  dbo.DiningTables ON dbo.DiningArea.DiningSysSeq = dbo.DiningTables.DiningSysSeq and  DiningArea.DiningSysSeq = " + id;

            ClsDiningArea clsDining=new ClsDiningArea();
            dtblUser = obj_Fun.getAll_Records(sql);
          
            if (dtblUser.Rows.Count == 1)
            {
                clsDining.DiningSysSeq = Convert.ToInt32(dtblUser.Rows[0][0]);
                clsDining.DiningCode = dtblUser.Rows[0][1].ToString();
                clsDining.DiningName = dtblUser.Rows[0][2].ToString();
                clsDining.Floor = dtblUser.Rows[0][3].ToString();
            }
            if (clsDining.DiningSysSeq > 0)
            {
            foreach ( <clsDining.DiningTables> in  ClsDiningTable clsDetail)
            { 
            }
                      


                return View();
            }

Samps Pro

мой класс-это
публичный класс ClsDiningArea
{

public Int32 DiningSysSeq { get; set; }
[Обязательно(ErrorMessage = "Пожалуйста, Введите Код Обеденной Зоны")]
публичная строка DiningCode { get; set; }
публичная строка DiningName { get; set; }
public string Floor { get; set; }
// public Byte[] DealImage { get; set; }
общедоступный виртуальный интерфейс ICollection&ЛТ;clsdiningtable&ГТ; DiningTables { получить; набор; }

public IEnumerable<clsdiningtable> ClsDiningTable { get; set; }
}

2 Ответов

Рейтинг:
2

MadMyche

Прежде всего это то, что ваш запрос таков: Уязвим для SQL-инъекций. Никогда не создавайте запрос, объединяющий строки вместе.
Хотя это действие контроллера принимает только целое число в качестве входного значения, и у вас есть некоторая защита, это плохая привычка. Этой уязвимости уже более 20 лет, и апатичный код, подобный этому, по сей день удерживает эту уязвимость в топ-10 проблем безопасности.
ORMs (например, EntityFramework) и LINQ стали передними и центральными, чтобы защитить вас от этих типов ошибок.

Правильный способ добавить переменную в запрос-это Command.Parameter коллекция.

string query = "SELECT * FROM Table WHERE TableNDX = @Value";
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@Value", value);

В вашем случае это выглядит так, как будто вы используете какой-то простой класс доступа к данным под названием obj_fun с собой getAll_Records метод. Возможно, вы захотите изучить этот метод, чтобы увидеть, есть ли у него перегрузка, доступная для принятия параметров, а если нет, то создайте ее и используйте.

Что возвращает ваш запрос, если вы запустите его в Sql-клиенте, таком как SSMS?
Пока вы находитесь там; я бы рекомендовал обрезать ваш запрос вниз с помощью псевдонимы Это намного легче читать
SELECT     a.DiningSysSeq, a.DiningCode, a.DiningName, a.Floor
     ,     t.TableCode, t.TableName, t.NOofSeat 
FROM       dbo.DiningArea   as A
INNER JOIN dbo.DiningTables as T
            ON a.DiningSysSeq = t.DiningSysSeq
           AND a.DiningSysSeq = @Value
Вы также можете рассмотреть возможность создания представления в своей базе данных, как только вы получите точную настройку запроса, чтобы сделать его более чистым вызовом.

Наконец, запустите это в ОТЛАЖИВАТЬ режим и шаг через это действие шаг за шагом, чтобы увидеть, какие значения находятся там, где внутри него. Это будет лучший способ проверить все.


Samps Pro

моя проблема не в этом query.my проблема заключается в том, что контроллер является новым в mvc.
моя проблема заключается в том, что я не получаю представления о том, как отправить мастер-деталь обе модели сразу в поле зрения контроллера, делая страницу детализации, чтобы показать запись таблицы мастер-деталей без использования entity framwork

MadMyche

Ну а в MVC, который будет отображать детали, вам нужно передать модель в представление; обычно это делается с помощью return View(model);.

Как правило, представление "подробно" возвращает модель, представляющую один экземпляр объекта; а представление "список" возвращает коллекцию одного типа модели.

Samps Pro

спасибо за ваш ответ, но я путаю, как отправить один экземпляр модели и представление списка как из controlerr в модель.
не могли бы вы помочь мне в написании actionRessult detail в контроллере, который возвращает как master, так и detail без out entityframwork.my мастер - класс размещен выше, а подробный класс-ниже
публичный класс ClsDiningTable
{

    public Int32 DiningSysSeq { get; set; }
    public string  TableCode { get; set; }
    public string  TableName { get; set; }
    public double NoofSeat { get; set; }

    public virtual ClsDiningArea DiningArea { get; set; }

}


запрос для мастера:: выберите * от обеденная зона, где DiningSysSeq= идентификатор
запрос для получения подробной информации::выберите * из diningtables, где DiningSysSeq =id

Samps Pro

я попробую вот это

public ActionResult Details(int id)


{
List<clsdiningtable> clsTable = новый список<clsdiningtable>();

DataTable dtblUser = новый DataTable();

строку стр="выбрать * из-обеденная зона, где DiningSysSeq =" + ИД;

ClsDiningArea clsDining=новый ClsDiningArea();

dtblUser = obj_Fun.getAll_Records(str);

если (dtblUser.Строк.Count > 0)
{
клсдининг.DiningSysSeq = Конвертировать.ToInt32(dtblUser.Rows[0][0]);
клсдининг.DiningCode = dtblUser.Rows[0][1].Метод toString();
клсдининг.DiningName = dtblUser.Rows[0][2].Метод toString();
клсдининг.Floor = dtblUser.Rows[0][3].Метод toString();
}

if (clsDining.DiningSysSeq > 0)
{
строка sql = "Select * from DiningTables where DiningSysSeq =" + id;


SqlDataReader myreader = null;

myreader = obj_Fun.GetRecordByQuery(sql);

if (myreader.HasRows)
{
пока (myreader.Читать())
{
клстейбл.Добавить(новый ClsDiningTable
{
DiningSysSeq = Конвертировать.ToInt32(myreader["DiningSysSeq"]),
TableCode = myreader["табличный код"].Метод toString(),
TableName = myreader["имя таблицы"].Метод toString(),
NoofSeat = Конвертировать.ToInt16(myreader["NoofSeat"])

});


}




}

}
еще
{

Видовой мешок.Сообщение = "IDataRecord не найден";
}

обратный вид(clsTable);
}

Рейтинг:
2

Samps Pro

спасибо за ваш ответ, но я путаю, как отправить один экземпляр модели и представление списка как из controlerr в модель.
не могли бы вы помочь мне в написании actionRessult detail в контроллере, который возвращает как master, так и detail без out entityframwork.my мастер - класс размещен выше, а подробный класс-ниже

public class ClsDiningTable
   {


       public Int32 DiningSysSeq { get; set; }
       public string  TableCode { get; set; }
       public string  TableName { get; set; }
       public double NoofSeat { get; set; }

       public virtual ClsDiningArea DiningArea { get; set; }

   }


запрос для мастера:: выберите * от обеденная зона, где DiningSysSeq= идентификатор
запрос для получения подробной информации::выберите * из diningtables, где DiningSysSeq =id