簡體   English   中英

從視圖到控制器的ASP.Net MVC回發顯示空值

[英]ASP.Net MVC Postback from View to Controller shows null values

我在將ViewModel發布回控制器時遇到問題,但是ViewModel沒有從View正確映射到Controller。

TopicIdContent應該包含值,但是在回發時,它們不能:

VS調試: ss

ViewModels:

  public class PostViewModel
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Author { get; set; }
    public DateTime DateOfTopic { get; set; }
}

public class ReplyViewModel
{
    public int TopicId { get; set; }
    public string Content { get; set; }

}

public class PostListAndReplyVM
{
    public List<PostViewModel> PostViewModel { get; set; }
    public ReplyViewModel ReplyViewModel { get; set; }
}

視圖:

@model centreforum.Models.PostListAndReplyVM

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Post</legend>

         @Html.HiddenFor(model => model.ReplyViewModel.TopicId)

    <div class="editor-label">
        @Html.LabelFor(model => model.ReplyViewModel.Content)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ReplyViewModel.Content)
        @Html.ValidationMessageFor(model => model.ReplyViewModel.Content)
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

生成的HTML:

<form action="/Post/List/7/" method="post"><input name="__RequestVerificationToken" type="hidden" value="xxxxxxxxxxxxx" />    <fieldset>
    <legend>Post</legend>

         <input data-val="true" data-val-number="The field TopicId must be a number." data-val-required="The TopicId field is required." id="ReplyViewModel_TopicId" name="ReplyViewModel.TopicId" type="hidden" value="7" />

    <div class="editor-label">
        <label for="ReplyViewModel_Content">Content</label>
    </div>
    <div class="editor-field">
        <input class="text-box single-line" id="ReplyViewModel_Content" name="ReplyViewModel.Content" type="text" value="" />
        <span class="field-validation-valid" data-valmsg-for="ReplyViewModel.Content" data-valmsg-replace="true"></span>
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
</form>

從生成的HTML中可以看到,TopicId肯定有一個值: value="7"

誰能看到問題出在表單發布和期望ReplyViewModel的控制器之間?

謝謝,

標記

輸入字段名稱以ReplyViewModel為前綴(由於model => model.ReplyViewModel.* lambda),因此您需要向模型綁定程序指示此信息:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult List([Bind(Prefix = "ReplyViewModel")] ReplyViewModel model)
{
    ...
}

或者,讓您的List操作采用PostListAndReplyVM模型:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult List(PostListAndReplyVM model)
{
    // obviously only model.ReplyViewModel will be bound here because
    // those are the only input fields in your form
    ...
}

問題在於您的視圖鍵入了PostListAndReplyVM因此它創建了諸如ReplyViewModel.Content名稱-但是,因為您的控制器操作需要一個ReplyViewModel ,所以無法綁定這些字段(即,沒有諸如ReplyViewModel.ReplyViewModel.Content類的東西ReplyViewModel.ReplyViewModel.Content )。

更改您的控制器操作:

public ActionResult List(PostListAndReplyVM reply)

或者,如果這是您的整個視圖,則只需將其鍵入ReplyViewModel (並相應地更新HtmlHelper表達式)。

它為null,因為您將其綁定到另一個模型

視野中

@model centreforum.Models.PostListAndReplyVM

在行動中ReplyViewModel

嘗試像

public ActionResult SomeAction(PostListAndReplyVM model)

    {
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM