2014-11-20 3 views
0

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


@model Module1.Models.Learn 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"type="text/javascript"></script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
    <legend>Learn</legend> 
     <div class="editor-label"> 
     @Html.LabelFor(model => model.ModuleId, "Module") 
     </div> 
     <div class="editor-field"> 
     @Html.DropDownList("ModuleId", String.Empty) 
     @Html.ValidationMessageFor(model => model.ModuleId) 
     </div> 

Выше мой Создание Просмотр для результатов обучения.


@model Module1.Models.Module 

@{ 
    ViewBag.Title = "Details"; 
} 

<h2>Learning Outcome : @Model.Code</h2> 
<br/

Это детали Просмотр моего обучения Результата. Я попытался использовать код «@ Module.Code» для отображения в моем представлении Create, но не увенчался успехом. Есть ли другой способ для меня получить тот же результат в представлении создания?


Мой модуль Модель

using System.Collections.Generic; 

namespace Module1.Models 
{ 
    public class Module 
{ 
    public int ModuleId { get; set; } 
    public int CourseId { get; set; } 
    public int LecturerId { get; set; } 
    public string Code { get; set; } 
    public string Description { get; set; } 

    public virtual Course Course { get; set; } 
    public virtual Lecturer Lecturer { get; set; } 

    public List<Reference> References { get; set; } 
    public List<Assessment> Assessments { get; set; }//new 
    public List<Front> Fronts { get; set; } 
    public List<Learn> Learns { get; set; } 
    public List<Topic> Topics { get; set; } 

} 
} 

Мой ЖЖ Модель

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Module1.Models 
{ 
    public class Learn 
    { 
    public int LearnId { get; set; } 
    public int ModuleId { get; set; } 
    public string LearnText { get; set; } 
    public bool A { get; set; } 
    public bool B { get; set; } 
    public bool C { get; set; } 
    public bool D { get; set; } 
    public bool E { get; set; } 
    public bool F { get; set; } 
    public bool G { get; set; } 
    public bool H { get; set; } 
    public bool I { get; set; } 
    public virtual Module Module { get; set; } 

} 
} 

+0

Непонятно, в чем ваш вопрос. Что вы имеете в виду, если пользователь нажимает на модуль для create_? В каком представлении, какой элемент щелкнул? –

+0

Его ссылка со страницы Подробности Представление для создания View @StephenMuecke –

+0

У вас нет ссылок в вашем представлении 'Details'. Вы хотите знать, как визуализировать ссылку, которая перенаправляется на представление «Создать»? –

ответ

0

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

var modules = // call database to get all the modules 
ViewBag.ModuleList = new SelectList(modules, "ModuleId", "Code"); 

Вид

@model Module1.Models.Learn 
.... 
@using (Html.BeginForm()) { 
    .... 
    @Html.DropDownListFor(m => m.ModuleID, (SelectList)ViewBag.ModuleList, "-please select-") 
    .... 
} 

или если с помощью модель вид (который вы должны обратиться What is ViewModel in MVC?), то было бы

@Html.DropDownListFor(m => m.ModuleID, Model.ModuleList, "-please select-") 

Примечание значение свойства Module.Code будет текст на дисплее, и вал ue имущества Module.ModuleId будет привязано к собственности Learn.ModuleID. Если вы установите значение Learn.ModuleID в контроллере, прежде чем передать его в представление, тогда будет отображен текст для этого Module, в противном случае будет выбран параметр «-please select-».

Примечание ВСЕГДА использование строго типизированных хелперы - DropDownListFor() не DropDownList()

Редактировать

на основе дальнейших замечаний OP, чтобы отобразить значение, как «только для чтения».В контроллере, получить значение Code для Module и назначить для модели представления или ViewBag собственности

var module = db.Modules.Where(m => m.ModuleId == learn.ModuleId).FirstOrDefault(); 
if (module != null) 
{ 
    ViewBag.Code = module.Code; 
} 

и в представлении

<div>@ViewBag.Code</div> 

или

@Html.DisplayFor(m => m.Code) // if using a view model 

и если вы хотите для возврата обратно значение также включить скрытый ввод для ModuleID

@Html.HiddenFor(m => m.ModuleId) 
+0

public ActionResult Create (int ID) { ViewBag.ModuleId = новый SelectList (db.Modules, "ModuleId", "Code"); Learn model = new Learn(); model.ModuleId = ID; возвращение Вид (модель); } –

+0

Это правильно? –

+0

№ 'ViewBag.ModuleList = новый SelectList (db.Modules, ModuleId", "Code"); 'Назначение параметров' ViewBag.ModuleList', которое затем используется '@ Html.DropDownListFor()' для отображения параметры в '