Ich versuche etwas besser zu verstehen, da ich neu in C#, .NET 3.5 und MVC bin.Fehler beim Auffüllen einer Dropdown-Liste während einer "GET" -Erstellungsaktion
ich durch das MVC NerdDinner Beispiel leite und wenn man sich das Ansichtsmodell hier: http://nerddinnerbook.s3.amazonaws.com/Part6.htm#highlighter_662935
Sie können die Länderliste sehen und wie es bevölkert wird, das scheint gut zu funktionieren, aber ich versuchte ein ähnliches zu tun sache unter Verwendung von LINQ und ich habe Probleme, mit dem SelectList-Ansatz, obwohl er von der IEnumerable-Schnittstelle erbt.
Ich habe eine Aufgabentabelle mit einem Fremdschlüssel zu einer Statustabelle. Der folgende Code gibt mir eine NullReferenceException, wenn ich einen GET für eine Erstellungsaktion ausführen. Ich kann sehen, dass ein anonymes Aufgabenobjekt keinen Status hat. Also muss ich wahrscheinlich nachsehen, aber ich verstehe nicht, wie das für das NerdDinner Beispiel nicht gemacht wird ??
public class TaskViewModel {
// Properties
public Task Task { get; private set; }
public SelectList Status { get; private set; }
// Constructor
public TaskViewModel(Task task) {
TaskRepository taskRepo = new TaskRepository();
Task = task;
Status = new SelectList(taskRepo.GetStatus(), Task.Status.description);
}
}
//
// GET: /Tasks/Create
public ActionResult Create()
{
Task task = new Task();
return View(new TaskViewModel(task));
}
//Code from TaskRepository
private TaskManagerDataContext db = new TaskManagerDataContext();
public IQueryable<Status> GetStatus() {
return from status in db.Status
orderby status.description
select status;
}
habe ich einen anderen Ansatz LINQ für die Drop-Down-Typ und der Bevölkerung der Drop-down funktioniert, aber ich bin noch zu testen, ob es den richtigen Wert wählt einmal ein Post gemacht wird und die Details anzuzeigen, die zurückgegeben wird. Ich frage mich auch, ob dies etwas in mein Repository verschoben werden sollte, anstatt eine Klasse in meinem Controller zu haben, die so etwas macht ??
Hier ist der Code:
//In TaskViewModel Class
public IEnumerable<SelectListItem> Types { get; private set; }
//In TaskViewModel constructor
IList<NPType> types = taskRepo.GetTypes().ToList();
Types =
from type in types
select new SelectListItem {
Selected = (type.typeId == task.typeId),
Text = type.description,
Value = type.typeId.ToString()
};
//The TaskForm partial View that is used for the Create action of the TaskController
<p>
<label for="type">type:</label>
<%= Html.DropDownList("Type", Model.Types)%>
<%= Html.ValidationMessage("type", "*") %>
</p>
<p>
<label for="status">status:</label>
<%= Html.DropDownList("Status", Model.Status)%>
<%= Html.ValidationMessage("status", "*") %>
</p>
und die TaskForm Ansicht erbt System.Web.Mvc.ViewUserControl
konnten Sie dieses Problem lösen? wenn ja, wie? –