wa.war Ответов: 1

Почему return view в MVC не работает?


он должен возвращать вид страницы вместо всплывающего окна, полного html-кода.

Смотреть

@model SendAFaxWeb.Models.Home
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>GetHistory</title>
</head>
<body>
    <div>
        <h2>Fax History List Test</h2>
        <form action="@Url.Action("GetHistory", "Home")" id="form" method="post" enctype="multipart/form-data">
            <table class="table table-condensed">
                @foreach (var item in Model.Documents)
            {
                    <tr>
                        <td>@item.Name</td>
                        <td>@item.Path</td>
                        <td>
                            <button class="btn btn-xs btn-danger" onclick="d(@item.Name)">
                                <span class="glyphicon glyphicon-trash"></span>
                            </button>
                        </td>
                    </tr>
                }
            </table>
       </form>
</div>
</body>
</html>


контроллер

public ActionResult GetHistory()
{
  //some code here
  return View(history)//list of object
}


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

я пытался ничего не возвращать, но все равно показывал всплывающий html-код. кстати, как поместить сюда изображение?

Karthik_Mahalingam

в чем именно заключается проблема?
вы не можете поместить изображение здесь, вместо этого вы можете разместить его на любом открытом сайте хостинга изображений и поделиться url-адресом.
http://imgur.com/

wa.war

http://imgur.com/a/MCHn0

взгляните на изображение здесь.

Karthik_Mahalingam

опубликуйте полный cshtml,
вы показываете его в окне оповещения

wa.war

я не показываю никакого окна оповещения, как вы можете видеть мой код выше.

Karthik_Mahalingam

но sccreenshot показывает alertbox

F-ES Sitecore

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

John C Rayan

Где находится функция onclick= " d (@item.Name)"

1 Ответов

Рейтинг:
9

Henryk Filipowicz

Я предполагаю, что ваше окно оповещения-это представление об ошибке (которое также отформатировано в формате HTML). Я бы сказал (посмотрев в свою стеклянную сферу) ваше определение модели неверно.

Ссылка на вашу модель:

@model SendAFaxWeb.Models.Home

выглядит тоже очень странно. Вы уверены, что ваша ViewModel называется "Home"?

И Ваше действие контроллера " GetHistory"
public ActionResult GetHistory()
{
  //some code here
  return View(history)//list of object
}

каков его результат? Ваше упомянутое мнение? За что? Подать бланк еще раз? (...и еще, и еще, и еще...)

Надеюсь, (если Название вашей модели представления является Главная) у вас есть:

// for the very first call 
[HttpGet]
public ActionResult GetHistory()
{
    SendAFaxWeb.Models.Home history = new SendAFaxWeb.Models.Home();
    //some code to set the model properties here
    history.Documents = GetDocuments(); // or so...
    return View(history)//not a list of objects, but a model containing list of objects
}

//for the posted data from your form
[HttpPost]
public ActionResult GetHistory(SendAFaxWeb.Models.Home history)
{
    //some update actions...

    //after the job is done, redirect to Index
    return RedirectToAction("Index","Home")
}


Если вам нужно обновить только часть представления, лучше использовать функцию f. ex. jquery ajax и обновить html-содержимое.

Пример:

Соответствующий html-элемент:

<div id="yourdivname">
</div>


Функция javascript / jquery (при условии, что входной текст "myParamTextBox" имеет ваш параметр для запроса:

getUpdatedDivContent = function () {
	var id = $("#myParamTextBox").val();
	$.ajax({
		url: '@Url.Action("UpdateMyDivContent", "Home")',
		type: 'GET',
		datatype: 'json',
		traditional: true,
		data: { myparameter: id },
		error: function (data) {
			alert($(data.responseText));
		},
		success: function (jsonresponse) {
			$("#yourdivname").html(jsonresponse);
		}
	});
};



Если вы хотите иметь довольно хороший форматированный контент div, вы можете вернуть частичное представление функции ajax.

[HttpGet]
public ActionResult UpdateMyDivContent(string myparameter)
{
    //if the "Create" static function is defined
    MyVeryNiceViewModel model = MyVeryNiceViewModel.Create(myparameter);
    model.MyProperty1 = "What ever 1";
    model.MyProperty2 = "What ever 2";
    model.MyProperty3 = "What ever 3";

    return PartialView("_yourUpdatedContent", model);
}


Кстати: ваша форма имеет идентификатор= "форма". Я не уверен, что это самая счастливая идея для имени элемента. Однако это не должно вызывать здесь вашей проблемы.