Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC文本区域不适用于';回发后不会改变_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc MVC文本区域不适用于';回发后不会改变

Asp.net mvc MVC文本区域不适用于';回发后不会改变,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我正在使用一个MVC视图,它显示一些带有HTML标记的文本。我在视图模型中定义了如下字段: public class RequestReviewViewModel { [Display(Name = "Email Body")] [AllowHtml] [DataType(DataType.MultilineText)] public string LetterTemplateBody { get; set; } } 当用户在下拉列表中选择一个新选项时,我将捕获

我正在使用一个MVC视图,它显示一些带有HTML标记的文本。我在视图模型中定义了如下字段:

public class RequestReviewViewModel
{
    [Display(Name = "Email Body")]
    [AllowHtml]
    [DataType(DataType.MultilineText)]
    public string LetterTemplateBody { get; set; }
}
当用户在下拉列表中选择一个新选项时,我将捕获回发,并用新数据更新字段以显示在文本区域中。但是文本区域没有改变

我的控制器中有以下代码:

var letterTemplList = 
    db.EmailBodyTemplate.Where(x => x.EmailTemplateTypeId == (int)EmailTemplateTypes.requestreview).ToList();
ViewBag.LetterTemplates = 
    new SelectList(letterTemplList, "EmailTemplateId", "EmailTemplateName");
var letterTemplate = 
    letterTemplList.Find(x => x.EmailTemplateId == thisModel.LetterTemplateId);
thisModel.LetterTemplateBody = 
    letterTemplate == null ? letterTemplList.First().Body : letterTemplate.Body;

// in this case, mode == "letterTemplate"
if (mode == "reviewRole" || mode == "letterTemplate" || !ModelState.IsValid)
{
    if (model.InitialRoleId != model.SelectedRoleId)
        model.SelectedProjectReviewers = GetReviewerProfiles(model.ProjectId, model.SelectedRoleId);

    return View(model);
}
这是显示字段的位置:

<div class="row">
    @Html.LabelFor(model => model.LetterTemplateBody, new { @class = "control-label" })
    @Html.TextAreaFor(model => model.LetterTemplateBody, 
        new { @class = "form-control", @style = "max-width:100%;height:400px;font-size:11px;" })
</div>
<p>@Model.LetterTemplateBody</p>

您的代码看起来是正确的,当您将@Model.LetterTemplateBody

放入cshtml中时,它会输出任何内容吗?好主意,它会正确更改。它是带有文本区域的内容。很可能在
ModelState
中有某个内容覆盖了该值
ModelState
Request
ViewData
ViewBag
和最后的
Model
组成,但仅作为最后手段。例如,如果在某个点上为textarea发布了一个值,那么它将位于
请求
中,这将覆盖您在
模型
上明确设置的任何内容。Chris,我如何确保模型数据是所使用的?我可以清除Request LetterTemplateBody值吗?否,请求为只读。我不确定您在这里实际在做什么,但是这些类型的问题通常是通过遵循PRG(post redirect get)来解决的。发布后,只有在出现错误时才返回视图。如果出现错误,您希望显示发布的值,以便用户可以纠正任何问题。但是,如果它是“成功的”,那么您将重定向,即使它返回到相同的URL。这样,柱子上所有的积垢都被清除了。
<textarea 
    class="form-control" 
    cols="20" 
    id="LetterTemplateBody" 
    name="LetterTemplateBody" 
    rows="2" 
    style="max-width:100%;height:400px;font-size:11px;">
Text from initial load
</textarea>